Hook Clavier

Résolu
CDSIT Messages postés 4 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 11 janvier 2008 - 6 déc. 2007 à 09:35
CDSIT Messages postés 4 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 11 janvier 2008 - 6 déc. 2007 à 11:57
Bonjour à tous,

J'ai vu sur le site pas mal de sources intéressantes et notamment le prog de ym_trainz sur les keystrokes mais son prog est encore trop complet pour moi, je m'explique :
J'ai juste besoin d'empêcher quelqu'un de faire un ctrl + echap tout en laissant ces deux touches opérationnelles si elles sont utilisées séparément.
Le tout dans un tout petit prog qui tournerait en tâche de fond sans être visible de l'utilisateur.

Merci à ceux qui connaissent le sujet et qui sont en mesure de m'aider.

J'ai du code sympa pour modifier l'interface windows mais il me manque cette petite chose...

2 réponses

pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
6 déc. 2007 à 10:04
salut,
Dans notre appli on utilise l'api SetHookWindows qui nous permet de filtrer les entrées claviers

Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long


Private Const WH_KEYBOARD = 2


Public sReponse As String


Public hHook As Long


'Fonction qui filtre les entrées clavier
Public Function KeyBoardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  
   If nCode >= 0 Then
'   'Process keys you want to filter
      Debug.Print AFF_POSTOUC      If (wParam Asc("V") Or wParam Asc("v")) And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "V"
         Exit Function      ElseIf (wParam Asc("F") Or wParam Asc("f")) And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "F"
         Exit Function      ElseIf (wParam Asc("C") Or wParam Asc("c")) And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "C"
         Exit Function      ElseIf (wParam Asc("A") Or wParam Asc("a")) And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "A"
         flag_abandon = True
         Exit Function
      ElseIf wParam = Asc(".") And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "F"
         Exit Function
      ElseIf wParam = vbKeyReturn And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "V"
         Exit Function
      ElseIf wParam = vbKeyNumpad0 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "0"
         Exit Function
      ElseIf wParam = vbKeyNumpad1 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "1"
         Exit Function
      ElseIf wParam = vbKeyNumpad2 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "2"
         Exit Function
      ElseIf wParam = vbKeyNumpad3 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "3"
         Exit Function
      ElseIf wParam = vbKeyNumpad4 And lParam <> 0 Then
         KeyBoardProc = 1
         Exit Function
      ElseIf wParam = vbKeyNumpad5 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "5"
         Exit Function
      ElseIf wParam = vbKeyNumpad6 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "6"
         Exit Function
      ElseIf wParam = vbKeyNumpad7 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "7"
         Exit Function
      ElseIf wParam = vbKeyNumpad8 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "8"
         Exit Function
      ElseIf wParam = vbKeyNumpad9 And lParam <> 0 Then
         KeyBoardProc = 1
         sReponse = "9"
         Exit Function
      End If
   End If
   'Debug.Print AFF_POSTOUC
   KeyBoardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
   sReponse = ""
  
End Function


Public Sub HookWindow()
   hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyBoardProc, 0&, App.ThreadID)
End Sub


voilà avec ce code, à partir de vb
à un moment on fait "HookWindow" qui enclenche le filtre clavier
puis quand notre process est terminé
UnHookWindow...

en espérant que cela va t'aider...

et a ta dispo si tu veux des précisions....

cordialement

Pat

 Don't Worry , Be Happy





<hr />
lorsque le problème est résolu, pensez Réponse Acceptée
3
CDSIT Messages postés 4 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 11 janvier 2008
6 déc. 2007 à 11:57
Ce code ne fonctionne pas dans mon module, je crois que quelquechose m'échappe, j'ai juste besoin d'empêcher l'appui simultanné sur les deux touches echap & control

Peut-être serait-il plus simple d'empêcher le menu démarrer de s'ouvrir. Dans une bouche par exemple ?

Si quelqu'un d'autre a une proposition, je suis preneur !
0
Rejoignez-nous