C# 设备附加的消息永远不会出现

C# 设备附加的消息永远不会出现,c#,usb,setupapi,C#,Usb,Setupapi,我正在尝试开发一个可以与USB HID通信的C#应用程序。我已经重写了我的WndProc方法,以便is捕获所有WM_DEVICECHANGE事件,并将DEVICECHANGE方法传递给OnDevicChange方法(此代码实际上是从Jan Axelson处借用的),如下所示 protected override void WndProc( ref Message m ) { try { // The OnDeviceChange r

我正在尝试开发一个可以与USB HID通信的C#应用程序。我已经重写了我的WndProc方法,以便is捕获所有WM_DEVICECHANGE事件,并将DEVICECHANGE方法传递给OnDevicChange方法(此代码实际上是从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。 为什么我从来没有看到过设备附加或设备移动的事件


有USB经验的人有什么想法吗?

您需要注册您的设备才能接收连接和删除的设备。看见这是一个很好的例子。在调试会话中,Visual Studio可以忽略消息

我不明白为什么
DBT\u DEVICEARRIVAL
DBT\u devicemovecomplete
都漏掉了。只需在线上取消设置断点
if(m.Msg==DeviceManagement.WM\u DEVICECHANGE)

我已经回答了,因为邮局没有关门