Freigeben über


RegisterDeviceNotificationA-Funktion (winuser.h)

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
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
Der hRecipient Parameter ist ein Fensterhandle.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
Der hRecipient Parameter ist ein Dienststatushandle.
 

Darüber hinaus können Sie den folgenden Wert angeben.

Wert Bedeutung
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Benachrichtigt den Empfänger von Geräteschnittstellenereignissen für alle Geräteschnittstellenklassen. (Das dbcc_classguid Mitglied wird ignoriert.)

Dieser Wert kann nur verwendet werden, wenn der dbch_devicetype Member DBT_DEVTYP_DEVICEINTERFACEist.

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)

Siehe auch

BroadcastSystemMessage-

DEV_BROADCAST_HDR

Geräteverwaltungsfunktionen

Gerätebenachrichtigungen

HandlerEx-

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE