RegisterDeviceNotificationA-Funktion (winuser.h)
Registriert das Gerät oder den Typ des Geräts, für das ein Fenster Benachrichtigungen empfängt.
Hinweis
Sie können CM_Register_Notification anstelle von RegisterDeviceNotification verwenden, wenn Ihr Code auf Windows 8 oder neuere Versionen von Windows abzielt. Der Vorteil von CM_Register_Notification besteht darin, dass kein Fensterhandle erforderlich ist, um zu funktionieren.
Syntax
HDEVNOTIFY RegisterDeviceNotificationA(
[in] HANDLE hRecipient,
[in] LPVOID NotificationFilter,
[in] DWORD Flags
);
Parameter
[in] hRecipient
Ein Handle für das Fenster oder den Dienst, das Geräteereignisse für die im NotificationFilter-Parameter angegebenen Geräte empfängt. Das gleiche Fensterhandle kann in mehreren Aufrufen von RegisterDeviceNotification verwendet werden.
Dienste können entweder ein Fensterhandle oder ein Dienst-status-Handle angeben.
[in] NotificationFilter
Ein Zeiger auf einen Datenblock, der den Typ des Geräts angibt, für das Benachrichtigungen gesendet werden sollen. Dieser Block beginnt immer mit der DEV_BROADCAST_HDR-Struktur . Die auf diesen Header folgenden Daten hängen vom Wert des dbch_devicetype-Elements ab, der DBT_DEVTYP_DEVICEINTERFACE oder DBT_DEVTYP_HANDLE sein kann. Weitere Informationen finden Sie in den Hinweisen.
[in] Flags
Dieser Parameter kann einen der folgenden Werte annehmen.
Wert | Bedeutung |
---|---|
|
Der Parameter hRecipient ist ein Fensterhandle. |
|
Der hRecipient-Parameter ist ein Dienst status Handle. |
Darüber hinaus können Sie den folgenden Wert angeben.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Gerätebenachrichtigungshandle.
Wenn bei der Funktion ein Fehler auftritt, ist der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Hinweise
Anwendungen senden Ereignisbenachrichtigungen mithilfe der BroadcastSystemMessage-Funktion . Jede Anwendung mit einem Fenster auf oberster Ebene kann grundlegende Benachrichtigungen empfangen, indem sie die WM_DEVICECHANGE Nachricht verarbeitet. Anwendungen können die RegisterDeviceNotification-Funktion verwenden, um sich für den Empfang von Gerätebenachrichtigungen zu registrieren.
Dienste können die RegisterDeviceNotification-Funktion verwenden, um sich für den Empfang von Gerätebenachrichtigungen zu registrieren. Wenn ein Dienst ein Fensterhandle im hRecipient-Parameter angibt, werden die Benachrichtigungen an die Fensterprozedur gesendet. Wenn hRecipient ein Dienst status Handle ist, werden SERVICE_CONTROL_DEVICEEVENT Benachrichtigungen an den Dienststeuerungshandler gesendet. Weitere Informationen zum Dienststeuerelementhandler finden Sie unter HandlerEx.
Achten Sie darauf, Plug & Play Geräteereignisse so schnell wie möglich zu behandeln. Andernfalls reagiert das System möglicherweise nicht mehr. Wenn Ihr Ereignishandler einen Vorgang ausführt, der die Ausführung möglicherweise blockiert (z. B. E/A), empfiehlt es sich, einen anderen Thread zu starten, um den Vorgang asynchron auszuführen.
Von RegisterDeviceNotification zurückgegebene Gerätebenachrichtigungshandles müssen geschlossen werden, indem die UnregisterDeviceNotification-Funktion aufgerufen wird, wenn sie nicht mehr benötigt werden.
Die DBT_DEVICEARRIVAL - und DBT_DEVICEREMOVECOMPLETE-Ereignisse werden automatisch an alle Fenster der obersten Ebene für Portgeräte übertragen. Daher ist es nicht erforderlich, RegisterDeviceNotification für Ports aufzurufen, und die Funktion schlägt fehl, wenn der dbch_devicetype Member DBT_DEVTYP_PORT ist. Volumebenachrichtigungen werden auch an Fenster der obersten Ebene übertragen, sodass die Funktion fehlschlägt, wenn dbch_devicetypeDBT_DEVTYP_VOLUME ist. OEM-definierte Geräte werden vom System nicht direkt verwendet, sodass die Funktion fehlschlägt, wenn dbch_devicetypeDBT_DEVTYP_OEM ist.
Beispiele
Ein Beispiel finden Sie unter Registrieren für Gerätebenachrichtigungen.
Hinweis
Der winuser.h-Header definiert RegisterDeviceNotification als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP |
Unterstützte Mindestversion (Server) | Windows Server 2003 |
Zielplattform | Windows |
Kopfzeile | winuser.h (windows.h einschließen) |
Bibliothek | User32.lib |
DLL | User32.dll |
APIs | ext-ms-win-ntuser-misc-l1-1-0 (eingeführt in Windows 8) |