我正在尝试开发一个可以与 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经验的人有什么想法吗?