Erzeugt oder öffnet ein benanntes oder unbenanntes Ereignis-Objekt
#include <WinAPIProc.au3>
_WinAPI_CreateEvent ( [$tAttributes = 0 [, $bManualReset = True [, $bInitialState = True [, $sName = ""]]]] )
$tAttributes | [optional] eine $tagSECURITY_ATTRIBUTES Struktur oder ein Zeiger auf diese. Falls NULL (0), kann das Handle nicht von Child-Prozessen geerbt/übernommen werden. Das "Descriptor"-Mitglied der Struktur legt den "Security Descriptor" des neuen Ereignisses fest. Falls $tAttributes 0 ist, erhält das Ereignis den Standard-Security Descriptor. Die ACLs im Standard-Security Descriptor eines Ereignisses gehen von den primären oder personifizierten Tokens des Erzeugers aus (primary, bzw. impersonate token). |
$bManualReset | [optional] Falls TRUE, erzeugt die Funktion ein manuell zurücksetzbares Ereignis-Objekt, welches die Benutzung der ResetEvent Funktion anfordert, um den Ereignisstatus auf unsignalisiert zu setzen. Falls FALSE, erzeugt die Funktion ein automatisch zurückgesetztes Ereignis-Objekt und das System setzt den Ereignisstatus wieder zurück, nachdem ein wartender Einzel-Thread freigegeben wurde. |
$bInitialState | [optional] Falls TRUE, ist der Anfangsstatus des Ereignis-Objekts auf signalisiert gesetzt; andernfalls auf unsignalisiert |
$sName | [optional] Der Name des Ereignis-Objekts (Groß-/Kleinschreibung ist zu beachten). Falls $sName dem Namen eines bereits existierenden Ereignis-Objekts entspricht, erfordert diese Funktion das EVENT_ALL_ACCESS-Zugriffsrecht. In diesem Falle werden die Parameter $bManualReset und $bInitialState ignoriert, da sie schon vom erzeugenden Prozess gesetzt wurden. Falls der Parameter $tAttributes mit 0 angegeben wird, bestimmt er, ob das Handle geerbt/übernommen werden kann, außer sein Security Descriptor-Mitglied wird ignoriert. Falls $sName weggelassen wird, wird das Ereignis-Objekt ohne Namen erzeugt. |
Erfolg: | Das Handle zu dem Ereignis-Objekt. |
Fehler: | 0, @extended wird auf _WinAPI_GetLastError() gesetzt. |
Falls das angegebene Ereignis-Objekt bereits vor dem Funktionsaufruf existiert, gibt die Funktion 0 zurück und setzt @extended = ERROR_ALREADY_EXISTS.
Suche nach CreateEvent in der MSDN Bibliothek.
#include <WinAPIHObj.au3>
#include <WinAPIProc.au3>
Global $g_tEvents = DllStructCreate("handle Event[3];")
$g_tEvents.Event(1) = _WinAPI_CreateEvent(0, True, False)
$g_tEvents.Event(2) = _WinAPI_CreateEvent(0, True, False)
$g_tEvents.Event(3) = _WinAPI_CreateEvent(0, True, False)
HotKeySet("{ESC}", "_Exit")
AdlibRegister("_FireEvent_1", 500)
AdlibRegister("_FireEvent_2", 800)
Local $iEvent
While 1
$iEvent = _WinAPI_WaitForMultipleObjects(3, $g_tEvents, False, 100)
Switch $iEvent
Case 0
ConsoleWrite("+ Erstes Event" & @CRLF)
_WinAPI_ResetEvent($g_tEvents.Event(1))
Case 1
ConsoleWrite("> Zweites Event" & @CRLF)
_WinAPI_ResetEvent($g_tEvents.Event(2))
Case 2
ConsoleWrite("! Beenden Event" & @CRLF)
AdlibUnRegister("_FireEvent_1")
AdlibUnRegister("_FireEvent_2")
_WinAPI_CloseHandle($g_tEvents.Event(1))
_WinAPI_CloseHandle($g_tEvents.Event(2))
_WinAPI_CloseHandle($g_tEvents.Event(3))
ExitLoop
Case -1 ;Error
ExitLoop
EndSwitch
Sleep(10)
WEnd
Func _Exit()
_WinAPI_SetEvent($g_tEvents.Event(3))
EndFunc ;==>_Exit
Func _FireEvent_1()
_WinAPI_SetEvent($g_tEvents.Event(1))
EndFunc ;==>_FireEvent_1
Func _FireEvent_2()
_WinAPI_SetEvent($g_tEvents.Event(2))
EndFunc ;==>_FireEvent_2
#include <WinAPI.au3>
#include <WinAPIProc.au3> ;needed for _WinAPI_ResetEvent
Global $tEvents = DllStructCreate("handle Event[3];")
$tEvents.Event(1) = _WinAPI_CreateEvent(0, True, False)
$tEvents.Event(2) = _WinAPI_CreateEvent(0, True, False)
$tEvents.Event(3) = _WinAPI_CreateEvent(0, True, False)
HotKeySet("{ESC}", "_Exit")
AdlibRegister("_FireEvent_1", 500)
AdlibRegister("_FireEvent_2", 800)
Global $iEvent
While 1
;$iEvent = _WinAPI_WaitForMultipleObjects(3, $tEvents, False, 100) ;Maybe future version
$iEvent = _WinAPI_WaitForMultipleObjects(3, DllStructGetPtr($tEvents), False, 100)
Switch $iEvent
Case 0
ConsoleWrite("+ First Event" & @CRLF)
_WinAPI_ResetEvent($tEvents.Event(1))
Case 1
ConsoleWrite("> Second Event" & @CRLF)
_WinAPI_ResetEvent($tEvents.Event(2))
Case 2
ConsoleWrite("! Exit Event" & @CRLF)
AdlibUnRegister("_FireEvent_1")
AdlibUnRegister("_FireEvent_2")
_WinAPI_CloseHandle($tEvents.Event(1))
_WinAPI_CloseHandle($tEvents.Event(2))
_WinAPI_CloseHandle($tEvents.Event(3))
ExitLoop
Case -1 ;Error
ExitLoop
EndSwitch
WEnd
Func _Exit()
_WinAPI_SetEvent($tEvents.Event(3))
EndFunc ;==>_Exit
Func _FireEvent_1()
_WinAPI_SetEvent($tEvents.Event(1))
EndFunc ;==>_FireEvent_1
Func _FireEvent_2()
_WinAPI_SetEvent($tEvents.Event(2))
EndFunc ;==>_FireEvent_2