Désactiver les touches Windows dans fenetre active

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Désactiver les touches Windows dans fenetre active

Message par GeBonet »

Bonjour,
Trouvé sur le forum anglais...

Code : Tout sélectionner

; ----------------------------------------------------------
; Code de : Luis : Forum Anglais 
; A la page : http://www.purebasic.fr/english/viewtopic.php?f=12&t=43397
; ----------------------------------------------------------
; Raw example on how (hopefully) disable the two Windows keys, only when your window is active.
; My keyboard is not infected with the two keys mentioned above, 
; so I tried With a on screen virtual keyboard and it seem to work.
; 
; Maybe someone is interested in this... so I thought to post it.
; Windows NT 4.0 SP3 or greater
; http://msdn.microsoft.com/en-us/library/ee416808%28VS.85%29.aspx
; ---------------------------------------------------------------
EnableExplicit

Global G_hKeyboardHook
Global G_flgWindowActive

Enumeration 
#WIN_MAIN
#EDITOR
EndEnumeration

CompilerIf Defined(KBDLLHOOKSTRUCT, #PB_Structure) = 0
  
Structure KBDLLHOOKSTRUCT
	vkCode.i
	scanCode.i
	flags.i
	time.i
	dwExtraInfo.i
EndStructure
CompilerEndIf

Procedure WindowsKeysHook(iCode, wParam, lParam)
Protected *key.KBDLLHOOKSTRUCT = lparam

If (iCode < 0 Or iCode <> #HC_ACTION)  
	ProcedureReturn CallNextHookEx_(G_hKeyboardHook, iCode, wParam, lParam)
EndIf

If wParam = #WM_KEYDOWN Or wParam = #WM_KEYUP
   If *key\vkCode = #VK_LWIN Or *key\vkCode = #VK_RWIN
        If G_flgWindowActive 
		AddGadgetItem(#EDITOR, -1, "Blocking " + Str(*key\vkCode))
		ProcedureReturn 1
	Else
	         AddGadgetItem(#EDITOR, -1, "Not blocked because window inactive or minimized.") 
	EndIf
   EndIf                 
EndIf

ProcedureReturn CallNextHookEx_(G_hKeyboardHook, iCode, wParam, lParam)
EndProcedure

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 

  If uMsg = #WM_ACTIVATEAPP
  	If wParam = 1
  		G_flgWindowActive = 1
  	Else
  		G_flgWindowActive = 0
  	EndIf 
  EndIf 

  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

Procedure Main()
  Protected iEvent

 If OpenWindow(#WIN_MAIN, 10, 10, 640, 480, "Main Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)     
	G_flgWindowActive = 1
		
	SetWindowCallback(@WinCallBack(), #WIN_MAIN)
	G_hKeyboardHook = SetWindowsHookEx_(#WH_KEYBOARD_LL, @WindowsKeysHook(), GetModuleHandle_(#Null), 0)
	
	EditorGadget(#EDITOR, 5,5,630,400)
		
	Repeat 
		iEvent = WaitWindowEvent()
		
		Select iEvent            
		      Case #PB_Event_Gadget
			  Select EventGadget()

      			   EndSelect
		 EndSelect        
	Until iEvent = #PB_Event_CloseWindow

	UnhookWindowsHookEx_(G_hKeyboardHook)        
  EndIf

EndProcedure
Main()
Ça peut toujours être utile... :wink:
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Désactiver les touches Windows dans fenetre active

Message par Ar-S »

merci pour ce code, ça peut servir.
j'obtiens 91 et 91 pour les 2 touches Windows, sont-ce les mêmes numéros pour tout le monde ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre