2010-01-11 4 views
2

Je suis en train de développer une application C# qui peut communiquer avec un USB HID. J'overriden ma méthode WndProc de sorte que soit prises tous les événements de WM_DEVICECHANGE et passe la méthode DeviceChange à une OnDeviceChange méthode (ce code est en fait emprunté à Jan Axelson) qui ressemble à ceci ....DeviceAttached un message ne vient jamais

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 ; 
    }    
} 

Pour une raison cependant, chaque fois que je branche un périphérique, que ce soit une souris ou un clavier ou le périphérique que je développe, qui sont tous HID, la valeur de WParam est toujours 0x7;

Je suis arrivé DBT.h et la valeur de 0x0007 est ...

#define DBT_DEVNODES_CHANGED   0x0007 

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

Je n'arrête pas juste après le premier message arrive soit je regarde tous les messages et pour chacun la valeur est toujours 0x0007. Pourquoi ne vois-je jamais les événements DeviceAttached ou DeviceRemoved?

Toute personne ayant une certaine expérience USB a des idées?

Répondre

0

Dans une session de débogage Visual Studio peut omettre les messages.

Je ne pourrais pas comprendre pourquoi les deux DBT_DEVICEARRIVAL et DBT_DEVICEREMOVECOMPLETE ont été manqués. Juste point de rupture non fixé sur la ligne if (m.Msg == DeviceManagement.WM_DEVICECHANGE).

J'ai répondu parce que wasnt poste fermé.

Questions connexes