Funktionreferenz


_WinAPI_CreateEvent

Beschreibung anzeigen in

Erzeugt oder öffnet ein benanntes oder unbenanntes Ereignis-Objekt

#include <WinAPIProc.au3>
_WinAPI_CreateEvent ( [$tAttributes = 0 [, $bManualReset = True [, $bInitialState = True [, $sName = ""]]]] )

Parameter

$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.

Rückgabewert

Erfolg: Das Handle zu dem Ereignis-Objekt.
Fehler: 0, @extended wird auf _WinAPI_GetLastError() gesetzt.

Bemerkungen

Falls das angegebene Ereignis-Objekt bereits vor dem Funktionsaufruf existiert, gibt die Funktion 0 zurück und setzt @extended = ERROR_ALREADY_EXISTS.

Verwandte Funktionen

$tagSECURITY_ATTRIBUTES

Siehe auch

Suche nach CreateEvent in der MSDN Bibliothek.

Beispiel

Beispiel 1

#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

Beispiel 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