tags:

views:

64

answers:

1

I am trying to develop a C# application that can communicate with a USB HID. I have overriden my WndProc method so that is catches all of the WM_DEVICECHANGE events and passes the DeviceChange method to a method OnDeviceChange (this code is actually borrowed from Jan Axelson) which looks like this....

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

For some reason though, everytime I plug in a device, whether it be a mouse or a keyboard or the device I am developing, which are all HID's, the value of WParam is always 0x7;

I checked in DBT.h and the value of 0x0007 is ...

define DBT_DEVNODES_CHANGED 0x0007

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

I don't just stop after the first message comes in either I look at all messages and for every one the value is always 0x0007; Why am I never seeing the DeviceAttached or DeviceRemoved events?

Anyone with some USB experience have any ideas?

Jordan

+1  A: 

You need to register your device in order to receive attached and removed. See RegisterDeviceNotification. Here is a great example to get you going.

SwDevMan81