我正在尝试开发一个可以与USB HID通信的C#应用程序。我已经覆盖了我的WndProc方法,以便捕获所有WM_DEVICECHANGE事件,并将DeviceChange方法传递给OnDeviceChange方法(此代码实际上是从Jan Axelson借来的),看起来像这样......
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经验的人有什么想法吗?
答案 0 :(得分:1)
您需要注册您的设备才能接收附加和删除。见RegisterDeviceNotification。 Here是让你前进的一个很好的例子。
答案 1 :(得分:0)
在调试会话中,Visual Studio可以省略消息。
我无法理解为什么错过了DBT_DEVICEARRIVAL
和DBT_DEVICEREMOVECOMPLETE
。刚刚在线设置断点
if ( m.Msg == DeviceManagement.WM_DEVICECHANGE )
。
我已回答,因为帖子没有关闭。