Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Registriert das Gerät oder den Gerätetyp, für das ein Fenster Benachrichtigungen empfängt.
Anmerkung
Sie können CM_Register_Notification anstelle von RegisterDeviceNotification verwenden, wenn Ihr Code auf Windows 8 oder neuere Versionen von Windows ausgerichtet ist. Der Vorteil von CM_Register_Notification besteht darin, dass kein Fensterziehpunkt zum Arbeiten erforderlich ist.
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. Dasselbe Fensterhandle kann in mehreren Aufrufen von RegisterDeviceNotificationverwendet werden.
Dienste können entweder ein Fensterhandle oder ein Dienststatushandle angeben.
[in] NotificationFilter
Ein Zeiger auf einen Datenblock, der den Gerätetyp angibt, für den Benachrichtigungen gesendet werden sollen. Dieser Block beginnt immer mit der DEV_BROADCAST_HDR Struktur. Die daten, die dieser Kopfzeile folgen, sind vom Wert des dbch_devicetype-Elements abhängig, das DBT_DEVTYP_DEVICEINTERFACE oder DBT_DEVTYP_HANDLEkönnen. Weitere Informationen finden Sie in den Hinweisen.
[in] Flags
Dieser Parameter kann einer der folgenden Werte sein:
Wert | Bedeutung |
---|---|
|
Der hRecipient Parameter ist ein Fensterhandle. |
|
Der hRecipient Parameter ist ein Dienststatushandle. |
Darüber hinaus können Sie den folgenden Wert angeben.
Rückgabewert
Wenn die Funktion erfolgreich ist, handelt es sich beim Rückgabewert um ein Gerätebenachrichtigungshandle.
Wenn die Funktion fehlschlägt, ist der Rückgabewert NULL-. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
Bemerkungen
Anwendungen senden Ereignisbenachrichtigungen mithilfe der BroadcastSystemMessage--Funktion. Jede Anwendung mit einem Fenster auf oberster Ebene kann grundlegende Benachrichtigungen empfangen, indem die WM_DEVICECHANGE Nachricht verarbeitet wird. Anwendungen können die funktion RegisterDeviceNotification verwenden, um gerätebenachrichtigungen zu empfangen.
Dienste können die funktion RegisterDeviceNotification verwenden, um gerätebenachrichtigungen zu empfangen. Wenn ein Dienst ein Fensterhandle im hRecipient Parameter angibt, werden die Benachrichtigungen an die Fensterprozedur gesendet. Wenn hRecipient ein Dienststatushandle ist, werden SERVICE_CONTROL_DEVICEEVENT Benachrichtigungen an den Dienststeuerungshandler gesendet. Weitere Informationen zum Dienststeuerungshandler finden Sie unter HandlerEx.
Stellen Sie sicher, dass Plug- und Play-Geräteereignisse so schnell wie möglich behandelt werden. Andernfalls reagiert das System möglicherweise nicht mehr. Wenn ihr Ereignishandler einen Vorgang ausführt, der die Ausführung blockieren kann (z. B. E/A), empfiehlt es sich, einen anderen Thread zu starten, um den Vorgang asynchron auszuführen.
Gerätebenachrichtigungshandles, die von RegisterDeviceNotification- zurückgegeben werden, müssen geschlossen werden, indem sie die funktion UnregisterDeviceNotification aufrufen, wenn sie nicht mehr benötigt werden.
Die ereignisse DBT_DEVICEARRIVAL und DBT_DEVICEREMOVECOMPLETE werden automatisch auf 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 das dbch_devicetype Mitglied DBT_DEVTYP_PORTist. Lautstärkebenachrichtigungen werden auch in Fenster der obersten Ebene übertragen, sodass die Funktion fehlschlägt, wenn dbch_devicetypeDBT_DEVTYP_VOLUMEist. OEM-definierte Geräte werden nicht direkt vom System verwendet, sodass die Funktion fehlschlägt, wenn dbch_devicetypeDBT_DEVTYP_OEMist.
Beispiele
Ein Beispiel finden Sie unter Registrieren für Gerätebenachrichtigungen.
Anmerkung
Der winuser.h-Header definiert RegisterDeviceNotification als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante 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 |
---|---|
mindestens unterstützte Client- | Windows XP |
mindestens unterstützte Server- | Windows Server 2003 |
Zielplattform- | Fenster |
Header- | winuser.h (enthalten Windows.h) |
Library | User32.lib |
DLL- | User32.dll |
API-Satz | ext-ms-win-ntuser-misc-l1-1-0 (eingeführt in Windows 8) |