Définit une fonction hook d'événement pour une série d'événements
#include <WinAPISys.au3>
_WinAPI_SetWinEventHook ( $iEventMin, $iEventMax, $pEventProc [, $iPID = 0 [, $iThreadID = 0 [, $iFlags = 0]]] )
$iEventMin | La plus petite valeur de l'événement dans la série d'événements ($EVENT_*) qui sont gérés par la fonction hook. |
$iEventMax | La plus grande valeur de l'événement dans la série d'événements ($EVENT_*) qui sont gérés par la fonction hook. |
$pEventProc | L'adresse d'une fonction hook définie par l'application qui appelle le système en réponse à des événements générés par un objet accessible. |
$iPID | [optionnel] L'ID du processus à partir duquel la fonction hook reçoit des événements. Si ce paramètre est 0 (valeur par défaut), la fonction hook est associé à tous les processus existants sur le bureau actuel. |
$iThreadID | [optionnel] L'ID du thread à partir duquel la fonction hook reçoit des événements. Si ce paramètre est 0 (valeur par défaut), la fonction hook est associé à toutes les threads existants sur le bureau actuel. |
$iFlags | [optionnel] Les flags qui spécifient l'emplacement de la fonction hook et des événements qui doivent être ignorés. Les options suivantes sont valables: $WINEVENT_INCONTEXT $WINEVENT_OUTOFCONTEXT (par défaut) $WINEVENT_SKIPOWNPROCESS $WINEVENT_SKIPOWNTHREAD Les flags suivants, simples ou combinés, sont valables: $WINEVENT_INCONTEXT $WINEVENT_OUTOFCONTEXT $WINEVENT_INCONTEXT | $WINEVENT_SKIPOWNPROCESS $WINEVENT_INCONTEXT | $WINEVENT_SKIPOWNTHREAD $WINEVENT_OUTOFCONTEXT | $WINEVENT_SKIPOWNPROCESS $WINEVENT_OUTOFCONTEXT | $WINEVENT_SKIPOWNTHREAD |
Succès: | Retourne une valeur qui identifie cette instance hook d'événement. |
Échec: | Retourne 0. |
Les clients peuvent appeler _WinAPI_SetWinEventHook() plusieurs fois s'ils veulent enregistrer d'autres fonctions hook ou écouter des événements supplémentaires.
Consultez SetWinEventHook dans la librairie MSDN.
#include <APISysConstants.au3> #include <GuiMenu.au3> #include <SendMessage.au3> #include <WinAPIGdi.au3> #include <WinAPIMisc.au3> #include <WinAPIProc.au3> #include <WinAPISys.au3> #include <WindowsConstants.au3> Local $hEventProc = DllCallbackRegister('_EventProc', 'none', 'ptr;dword;hwnd;long,long;dword;dword') Global $g_tRECT, $g_iIndex, $g_hMenu = 0 OnAutoItExitRegister('OnAutoItExit') Local $hEventHook = _WinAPI_SetWinEventHook($EVENT_SYSTEM_MENUPOPUPSTART, $EVENT_SYSTEM_MENUPOPUPEND, DllCallbackGetPtr($hEventProc)) Run(@SystemDir & '\notepad.exe') While 1 Sleep(1000) WEnd Func OnAutoItExit() _WinAPI_UnhookWinEvent($hEventHook) DllCallbackFree($hEventProc) EndFunc ;==>OnAutoItExit Func _EventProc($hEventHook, $iEvent, $hWnd, $iObjectID, $iChildID, $iThreadID, $iEventTime) #forceref $hEventHook, $iObjectID, $iChildID, $iThreadID, $iEventTime Switch $iEvent Case $EVENT_SYSTEM_MENUPOPUPSTART ; Ajoute "View - Calculator" $g_hMenu = _SendMessage($hWnd, $MN_GETHMENU) If (_GUICtrlMenu_IsMenu($g_hMenu)) And (StringInStr(_GUICtrlMenu_GetItemText($g_hMenu, 0), 'Status Bar')) And (StringInStr(_WinAPI_GetWindowFileName($hWnd), 'notepad.exe')) Then $g_iIndex = _GUICtrlMenu_GetItemCount($g_hMenu) _GUICtrlMenu_InsertMenuItem($g_hMenu, $g_iIndex, 'Calculator'& @TAB & ':-)') $g_tRECT = _GUICtrlMenu_GetItemRectEx($hWnd, $g_hMenu, $g_iIndex) Else $g_hMenu = 0 EndIf Case $EVENT_SYSTEM_MENUPOPUPEND If $g_hMenu Then _GUICtrlMenu_DeleteMenu($g_hMenu, $g_iIndex) Local $tPOINT = _WinAPI_GetMousePos() If _WinAPI_PtInRect($g_tRECT, $tPOINT) Then Run(@SystemDir & '\calc.exe') EndIf $g_hMenu = 0 EndIf EndSwitch EndFunc ;==>_EventProc