共用方式為


RegisterDeviceNotificationA 函式 (winuser.h)

註冊視窗將接收通知的裝置或裝置類型。

注意

如果您的程式代碼是以 Windows 8 或更新版本的 Windows 為目標,您可以使用 CM_Register_Notification,而不是 RegisterDeviceNotificationCM_Register_Notification 的優點是它不需要視窗句柄才能運作。

語法

HDEVNOTIFY RegisterDeviceNotificationA(
  [in] HANDLE hRecipient,
  [in] LPVOID NotificationFilter,
  [in] DWORD  Flags
);

參數

[in] hRecipient

窗口或服務的句柄,將接收 NotificationFilter 參數中所指定裝置的裝置事件。 相同的視窗句柄可以在多個呼叫中使用,以 RegisterDeviceNotification

服務可以指定視窗句柄或服務狀態句柄。

[in] NotificationFilter

數據區塊的指標,指定應該傳送通知的裝置類型。 此區塊一律以 DEV_BROADCAST_HDR 結構開頭。 此標頭後面的數據取決於 dbch_devicetype 成員的值,它可以 DBT_DEVTYP_DEVICEINTERFACEDBT_DEVTYP_HANDLE。 如需詳細資訊,請參閱。

[in] Flags

此參數可以是下列其中一個值。

價值 意義
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
hRecipient 參數是視窗句柄。
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
hRecipient 參數是服務狀態句柄。
 

此外,您可以指定下列值。

價值 意義
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
通知所有裝置介面類別的裝置介面事件收件者。 (忽略 dbcc_classguid 成員。

只有在 dbch_devicetype 成員 DBT_DEVTYP_DEVICEINTERFACE時,才能使用這個值。

傳回值

如果函式成功,傳回值就是裝置通知句柄。

如果函式失敗,則傳回值 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

言論

應用程式會使用 BroadcastSystemMessage 函式傳送事件通知。 具有最上層視窗的任何應用程式都可以透過處理 WM_DEVICECHANGE 訊息來接收基本通知。 應用程式可以使用 RegisterDeviceNotification 函式來註冊以接收裝置通知。

服務可以使用 RegisterDeviceNotification 函式來註冊以接收裝置通知。 如果服務在 hRecipient 參數中指定視窗句柄,則會將通知傳送至窗口程式。 如果 hRecipient 是服務狀態句柄,SERVICE_CONTROL_DEVICEEVENT 通知會傳送至服務控制處理程式。 如需服務控制處理程式的詳細資訊,請參閱 HandlerEx

請務必儘快處理隨插即用裝置事件。 否則,系統可能會變得沒有回應。 如果您的事件處理程式是執行可能會封鎖執行的作業(例如 I/O),最好啟動另一個線程以異步方式執行作業。

RegisterDeviceNotification 所傳回的裝置通知句柄必須藉由呼叫不再需要的 UnregisterDeviceNotification 函式來關閉。

DBT_DEVICEARRIVALDBT_DEVICEREMOVECOMPLETE 事件會自動廣播至埠裝置的所有最上層視窗。 因此,不需要針對埠呼叫 RegisterDeviceNotification,如果 dbch_devicetype 成員 DBT_DEVTYP_PORT,函式就會失敗。 磁碟區通知也會廣播至最上層視窗,因此如果 dbch_devicetypeDBT_DEVTYP_VOLUME,函式會失敗。 系統不會直接使用 OEM 定義的裝置,因此如果 dbch_devicetypeDBT_DEVTYP_OEM,則函式會失敗。

例子

如需範例,請參閱 註冊裝置通知

注意

winuser.h 標頭會根據 UNICODE 預處理器常數的定義,將 RegisterDeviceNotification 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP
支援的最低伺服器 Windows Server 2003
目標平臺 窗戶
標頭 winuser.h (包括 Windows.h)
連結庫 User32.lib
DLL User32.dll
API 集 ext-ms-win-ntuser-misc-l1-1-0 (在 Windows 8 中引進)

另請參閱

BroadcastSystemMessage

DEV_BROADCAST_HDR

裝置管理功能

裝置通知

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE