2010-01-11 2 views
2

Я пытаюсь разработать приложение C#, которое может связываться с USB HID. Я перекрываться мой метод WndProc так что ловит все из WM_DEVICECHANGE событий и передает метод DeviceChange к методу OnDeviceChange (этот код на самом деле заимствованы из Яна Аксельсон), который выглядит следующим образом ....Сообщение DeviceAttached никогда не приходит

protected override void WndProc(ref Message m) 
{    
    try 
    { 
     // The OnDeviceChange routine processes WM_DEVICECHANGE messages. 

     if (m.Msg == DeviceManagement.WM_DEVICECHANGE) 
     { 
      OnDeviceChange(m); 
     } 

     // Let the base form process the message. 

     base.WndProc(ref m);     
    } 
    catch (Exception ex) 
    { 
     DisplayException(this.Name, ex); 
     throw ; 
    }    
} 

Для по какой-то причине, каждый раз, когда я подключаю устройство, будь то мышь или клавиатура или устройство, которое я разрабатываю, все это HID, значение WParam всегда равно 0x7;

Я проверил в DBT.h и значение 0x0007 является ...

#define DBT_DEVNODES_CHANGED   0x0007 

/* 
* Message = WM_DEVICECHANGE 
* wParam = DBT_QUERYCHANGECONFIG 
* lParam = 0 
* 
*  sent to ask if a config change is allowed 
*/.... 

Я не просто остановиться после первого приходит сообщение или я смотрю на всех сообщениях, и для каждой величины всегда 0x0007. Почему я никогда не вижу события DeviceAttached или DeviceRemoved?

У кого-нибудь с опытом USB есть идеи?

ответ

1

Для того, чтобы получить прикрепленный файл и удалить его, вам необходимо зарегистрировать его. См. RegisterDeviceNotification. Here - отличный пример для вас.

0

В сеансе отладки Visual Studio может опускать сообщения.

Я не мог понять, почему и DBT_DEVICEARRIVAL, и DBT_DEVICEREMOVECOMPLETE были упущены. Просто отключите точку останова на линии if (m.Msg == DeviceManagement.WM_DEVICECHANGE).

Я ответил, потому что сообщение не было закрыто.

Смежные вопросы