UDF > WinAPIEx > System > Automation >


_WinAPI_SetWinEventHook

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]]] )

Paramètres

$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

Valeur de retour

Succès: Retourne une valeur qui identifie cette instance hook d'événement.
Échec: Retourne 0.

Remarque

Les clients peuvent appeler _WinAPI_SetWinEventHook() plusieurs fois s'ils veulent enregistrer d'autres fonctions hook ou écouter des événements supplémentaires.

Voir aussi

Consultez SetWinEventHook dans la librairie MSDN.

Exemple

#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