次の方法で共有


RegisterDeviceNotificationA 関数 (winuser.h)

ウィンドウが通知を受信するデバイスまたはデバイスの種類を登録します。

手記

コードが Windows 8 以降のバージョンの Windows を対象 場合は、RegisterDeviceNotification の代わりに CM_Register_Notification を使用できます。 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

このパラメーターには、次のいずれかの値を指定できます。

価値 意味
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_DEVICEARRIVAL イベントと DBT_DEVICEREMOVECOMPLETE イベントは、ポート デバイスのすべての最上位ウィンドウに自動的にブロードキャストされます。 そのため、ポートの RegisterDeviceNotification 呼び出す必要はありません。dbch_devicetype メンバーが DBT_DEVTYP_PORT場合、関数は失敗します。 ボリューム通知も最上位レベルのウィンドウにブロードキャストされるため、dbch_devicetypeDBT_DEVTYP_VOLUME場合、関数は失敗します。 OEM で定義されたデバイスはシステムによって直接使用されないため、dbch_devicetypeDBT_DEVTYP_OEM場合、関数は失敗します。

例については、「デバイス通知の登録」を参照してください。

手記

winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして RegisterDeviceNotification を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント 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