1

RegisterDeviceNotificationを使用して、WM_DEVICECHANGEイベントを使用してUSBデバイスへの変更を監視しています。ただし、RegisterDeviceNotification()を呼び出すと、通知ハンドルに対してNULLが返されます。これは、失敗したことを示しているはずです。ただし、GetLastError()はERROR_SUCCESSを返し、通知は実際に通過します。
これは、後で通知の登録を解除してから再登録する必要があるときに、実際の問題を引き起こします。返されたハンドルがNULLだったので、実際に再登録することはできません。試してみると、RegisterDeviceNotification()がハングします。

私のコードは次のとおりです。

DEV_BROADCAST_HANDLE   devBrHdr;

::ZeroMemory( &devBrHdr,sizeof( DEV_BROADCAST_HANDLE ) );
devBrHdr.dbch_size = sizeof( DEV_BROADCAST_HANDLE );
devBrHdr.dbch_devicetype = DBT_DEVTYP_HANDLE;
devBrHdr.dbch_handle = m_hDriver;

m_hDevNotify = ::RegisterDeviceNotification( hWnd,&devBrHdr,DEVICE_NOTIFY_WINDOW_HANDLE );

m_hDriverは、デバイス(USBバーコードスキャナー)に接続したときに先に開いたドライバーへのハンドルです。

私がここで間違っていることについて何か考えはありますか?

4

1 に答える 1

0
  1. RegisterDeviceNotificationと の間で別の Win32 API 呼び出しを行っていないことを確認してくださいGetLastError

  2. の値を確認してくださいdevBrHdr.dbch_hdevnotify。によって返される同じハンドルが含まれている必要がありますRegisterDeviceNotification

  3. m_hDriverへの呼び出しから値が取得されましたCreateFileか?

于 2009-03-18T18:40:01.307 に答える