RegisterDeviceNotificationA 函式 (winuser.h)
註冊視窗將接收通知的裝置或裝置類型。
注意
如果您的程式代碼是以 windows Windows 8 或更新版本為目標,則可以使用 CM_Register_Notification,而不是 RegisterDeviceNotification。 CM_Register_Notification的優點是不需要視窗句柄才能運作。
語法
HDEVNOTIFY RegisterDeviceNotificationA(
[in] HANDLE hRecipient,
[in] LPVOID NotificationFilter,
[in] DWORD Flags
);
參數
[in] hRecipient
視窗或服務的句柄,將接收 NotificationFilter 參數中所指定裝置的裝置事件。 相同的視窗句柄可用於 對 RegisterDeviceNotification 的多個呼叫。
服務可以指定視窗句柄或服務狀態句柄。
[in] NotificationFilter
數據區塊的指標,指定應該傳送通知的裝置類型。 此區塊一律以 DEV_BROADCAST_HDR 結構開始。 此標頭後面的數據取決於可DBT_DEVTYP_DEVICEINTERFACE或DBT_DEVTYP_HANDLE之dbch_devicetype成員的值。 如需詳細資訊,請參閱<備註>。
[in] Flags
此參數可以是下列其中一個值。
值 | 意義 |
---|---|
|
hRecipient 參數是視窗句柄。 |
|
hRecipient 參數是服務狀態句柄。 |
此外,您可以指定下列值。
值 | 意義 |
---|---|
|
通知所有裝置介面類別的裝置介面事件的收件者。 (忽略 dbcc_classguid 成員。) 只有在 dbch_devicetype 成員 DBT_DEVTYP_DEVICEINTERFACE時,才能使用此值。 |
傳回值
如果函式成功,傳回值為裝置通知句柄。
如果函式失敗,則傳回值為 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
應用程式會使用 BroadcastSystemMessage 函式傳送事件通知。 任何具有最上層視窗的應用程式都可以透過處理 WM_DEVICECHANGE 訊息來接收基本通知。 應用程式可以使用 RegisterDeviceNotification 函式來註冊以接收裝置通知。
服務可以使用 RegisterDeviceNotification 函式來註冊以接收裝置通知。 如果服務在 hRecipient 參數中指定視窗句柄,則會將通知傳送至視窗程式。 如果 hRecipient 是服務狀態句柄, SERVICE_CONTROL_DEVICEEVENT 通知會傳送至服務控制處理程式。 如需有關服務控制處理程式的詳細資訊,請參閱 HandlerEx。
請務必儘快處理 隨插即用 裝置事件。 否則,系統可能會變得沒有回應。 如果您的事件處理程式是執行可能會封鎖執行 (的作業,例如 I/O) ,最好啟動另一個線程以異步方式執行作業。
當不再需要時,必須呼叫 UnregisterDeviceNotification 函式來關閉 RegisterDeviceNotification 所傳回的裝置通知句柄。
DBT_DEVICEARRIVAL和DBT_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 |
目標平台 | Windows |
標頭 | winuser.h (包括 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
API 集合 | ext-ms-win-ntuser-misc-l1-1-0 (於 Windows 8) |