Installe une proc�dure hook d�finie par une application, dans une cha�ne hook
#include <WinAPISys.au3>
_WinAPI_SetWindowsHookEx ( $iHook, $pProc, $hDll [, $iThreadId = 0] )
$iHook | Sp�cifie le type de proc�dure hook � installer. Ce param�tre peut prendre l'une des valeurs suivantes: $WH_CALLWNDPROC - Installe une proc�dure hook qui surveille les messages avant que le syst�me les envoie � la proc�dure de fen�tre de destination $WH_CALLWNDPROCRET - Installe une proc�dure de hook qui surveille les messages apr�s qu'ils aient �t� trait�s par la proc�dure de fen�tre de destination $WH_CBT - Installe une proc�dure hook qui re�oit les notifications utiles � une application CBT (Computer Based Training) $WH_DEBUG - Installe une proc�dure hook utile pour le d�bogage d'autres proc�dures hook $WH_FOREGROUNDIDLE - Installe une proc�dure hook qui sera appel�e lorsque le thread de premier plan de l'application est en passe de devenir inactif $WH_GETMESSAGE - Installe une proc�dure hook qui surveille les messages post�s dans la file de messages $WH_JOURNALPLAYBACK - Installe une proc�dure hook qui poste des messages pr�c�demment enregistr�s par la proc�dure hook $WH_JOURNALRECORD $WH_JOURNALRECORD - Installe une proc�dure hook qui enregistre les messages d'entr�e post�s dans la file d'attente des messages du syst�me $WH_KEYBOARD - Installe une proc�dure hook qui surveille les messages de frappe $WH_KEYBOARD_LL - Installe une proc�dure hook qui surveille les �v�nements d'entr�e du clavier de bas niveau $WH_MOUSE - Installe une proc�dure hook qui surveille les messages souris $WH_MOUSE_LL - Installe une proc�dure hook qui surveille les �v�nements d'entr�e de bas niveau de la souris $WH_MSGFILTER - Installe une proc�dure hook qui surveille les messages g�n�r�s � la suite d'un �v�nement d'entr�e dans une bo�te de dialogue, une bo�te de message, un menu ou une barre de d�filement $WH_SHELL - Installe une proc�dure hook qui re�oit les notifications utiles � des applications shell $WH_SYSMSGFILTER - Installe une proc�dure hook qui surveille les messages g�n�r�s � la suite d'un �v�nement d'entr�e dans une bo�te de dialogue, une bo�te de message, un menu ou une barre de d�filement |
$pProc | Pointeur vers la proc�dure hook. Si le param�tre $iThreadID est z�ro ou sp�cifie l'identifiant d'un thread cr�� par un processus diff�rent, le param�tre $pProc doit pointer vers une proc�dure hook dans une DLL. Dans le cas contraire, $pProc peut pointer vers une proc�dure hook dans le code associ� au processus en cours |
$hDll | Handle d'une DLL contenant la proc�dure hook point�e par le param�tre $pProc. Le param�tre $hMod doit �tre d�fini � NULL si le param�tre $iThreadID sp�cifie un thread cr�� par le processus actuel et si la proc�dure hook est dans le code associ� au processus en cours |
$iThreadID | [optionnel] Sp�cifie l'identifiant du thread avec lequel la proc�dure hook doit �tre associ�e. Si ce param�tre est �gal � z�ro, la proc�dure hook est associ�e � toutes les threads existants en cours d'ex�cution dans le m�me bureau que le thread appelant |
Succ�s: | Retourne le handle de la proc�dure hook |
�chec: | Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations suppl�mentaires sur l'erreur. |
_WinAPI_CallNextHookEx, _WinAPI_UnhookWindowsHookEx
Consultez SetWindowsHookEx dans la librairie MSDN.
#include <MsgBoxConstants.au3> #include <StructureConstants.au3> #include <WinAPIConstants.au3> #include <WinAPISys.au3> #include <WindowsConstants.au3> Global $g_hHook, $g_hStub_KeyProc, $g_sBuffer = "" Example() Func Example() OnAutoItExitRegister("Cleanup") Local $hMod $g_hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam") $hMod = _WinAPI_GetModuleHandle(0) $g_hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($g_hStub_KeyProc), $hMod) MsgBox($MB_SYSTEMMODAL, "", "Cliquez sur OK, puis dans notepad tapez..." & _ @CRLF & @CRLF & "Jon" & @CRLF & "AutoIt" & @CRLF & @CRLF & "Pressez Esc pour arr�ter le script") Run("notepad.exe") WinWait("[CLASS:Notepad]") WinActivate("[CLASS:Notepad]") While 1 Sleep(10) WEnd EndFunc ;==>Example Func EvaluateKey($iKeycode) If (($iKeycode > 64) And ($iKeycode < 91)) _ ; a - z Or (($iKeycode > 96) And ($iKeycode < 123)) _ ; A - Z Or (($iKeycode > 47) And ($iKeycode < 58)) Then ; 0 - 9 $g_sBuffer &= Chr($iKeycode) Switch $g_sBuffer Case "Jon" ToolTip("Que voulez-vous dire?") Case "AutoIt" ToolTip("AutoIt Rocks") EndSwitch ElseIf ($iKeycode > 159) And ($iKeycode < 164) Then Return ElseIf ($iKeycode = 27) Then ; touche esc Exit Else $g_sBuffer = "" EndIf EndFunc ;==>EvaluateKey ;================================================== ========= ; Fonction de rappel ;================================================== ========= Func _KeyProc($nCode, $wParam, $lParam) Local $tKEYHOOKS $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam) If $nCode < 0 Then Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam) EndIf If $wParam = $WM_KEYDOWN Then EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode")) Else Local $iFlags = DllStructGetData($tKEYHOOKS, "flags") Switch $iFlags Case $LLKHF_ALTDOWN ConsoleWrite("$LLKHF_ALTDOWN" & @CRLF) Case $LLKHF_EXTENDED ConsoleWrite("$LLKHF_EXTENDED" & @CRLF) Case $LLKHF_INJECTED ConsoleWrite("$LLKHF_INJECTED" & @CRLF) Case $LLKHF_UP ConsoleWrite("$LLKHF_UP: scanCode - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & "vkCode - " & DllStructGetData($tKEYHOOKS, "vkCode") & @CRLF) EndSwitch EndIf Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam) EndFunc ;==>_KeyProc Func Cleanup() _WinAPI_UnhookWindowsHookEx($g_hHook) DllCallbackFree($g_hStub_KeyProc) EndFunc ;==>Cleanup