函数参考


_EventLog__Notify

使应用程序接受一个事件通知

#Include <EventLog.au3>
_EventLog__Notify($hEventLog, $hEvent)

参数

$hEventLog 事件日志句柄
$hEvent 手工重设的事件对象的句柄

返回值

成功: True
失败: False

注意/说明

该函数无法进行远程处理.
如果hEventLog参数是指向远程计算机上的事件日志, 函数返回 0, 且GetLastError返回ERROR_INVALID_HANDLE.
当事件写入由hEventLog指定的日志时, 系统使用PulseEvent函数设置由hEvent参数指定的事件为信号状态.
如果线程在系统调用PulseEvent时没有等待, 线程将无法收到通知. 因此, 必须创建一个独立线程等待通知.
注意系统调用PulseEvent不会超过每五秒一次. 因此, 即使日志在五秒内发生不止一次改变, 你将只收到一个通知.
系统将继续通知你这些改变直到你敢比事件日志的句柄.
可以使用_EventLog__Close或_EventLog__DeregisterSource函数关闭事件日志句柄.

相关

_EventLog__Close, _EventLog__DeregisterSource

示例/演示


#include <GUIConstantsEx.au3>
#include <EventLog.au3>
#include <WinAPI.au3>

Global $iMemo

_Main()

Func _Main()
    Local $hEventLog, $hEvent, $iResult

    ; 创建 GUI
    GUICreate("EventLog", 400, 300)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 300, 0)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUISetState()

    ; 建立事件
    $hEventLog = _EventLog__Open("", "Security")
    $hEvent = _WinAPI_CreateEvent(0, False, False, "")
    _EventLog__Notify($hEventLog, $hEvent)

    ; 等待新事件发生
    MemoWrite("Waiting for new event")
    $iResult = _WinAPI_WaitForSingleObject($hEvent)
    _WinAPI_CloseHandle($hEvent)
    _EventLog__Close($hEventLog)

    ; 写入结果
    If $iResult = -1 Then
        MemoWrite("Wait failed")
    Else
        MemoWrite("New event occurred")
    EndIf

    ; 循环直到用户退出
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

EndFunc   ;==>_Main

; 写入一行到 memo 控件
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite