DeviceAttached消息永远不会到来

时间:2010-01-11 23:05:38

标签: c# usb setupapi

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

2 个答案:

答案 0 :(得分:1)

您需要注册您的设备才能接收附加和删除。见RegisterDeviceNotificationHere是让你前进的一个很好的例子。

答案 1 :(得分:0)

在调试会话中,Visual Studio可以省略消息。

我无法理解为什么错过了DBT_DEVICEARRIVALDBT_DEVICEREMOVECOMPLETE。刚刚在线设置断点 if ( m.Msg == DeviceManagement.WM_DEVICECHANGE )

我已回答,因为帖子没有关闭。