我的应用是想解决USB的插入和拔出的区分.
一个很简单的方法是:
interface
......
private
    { Private declarations }
    procedure wmdevicechange(var msg:TMessage);message WM_DEVICECHANGE;......implementation......procedure TForm1.wmdevicechange(var msg: TMessage);
begin
  if (Msg.WParam=7) and (Msg.LPARAM=0) then 
  begin
    ShowMessage('有了优盘!');
  end;
end;但是此种方法是在太简单,无法判断是哪种usb设备的插入和拔除
也无法区分是插入还是拔除。但是参照WM_DEVICECHANGE的sdk说明,确是可以区分是插入或是拔出
而且在DBT_DEVICEARRIVAL中Lparam指向了具体的设备信息(Pointer to a structure identifying the device inserted)。我想请问大家应该如何解决呢,如何获得这个Lparam所指向的信息。
有人说可以用“RegisterDeviceNotification”,不知道到是否是这样,请大家指点。

解决方案 »

  1.   

    在google 里 输入wm_DeviceChange
    我也不懂
      

  2.   

    现在我看了一些资料,对于Wparam的值为7代表DBT_DEVNODES_CHANGED
    在VC下调试的时候也是这样Wparam=0x07,Lparam的值=0x00。
    但是据说可以用“RegisterDeviceNotification”解决,但我自己也没试过
    不知道,大家是否知道,这样做能解决吗?
      

  3.   

    转贴,看看有没有用当win95系统的硬件设置发生变化时,系统将会向所有应用程序发送一条WM_DEVICECHANGE消息.当有设备被禁止或激活时(比如我们插入光盘,从光驱中取出光盘,或者在系统设备中删除或禁止打印端口),该消息的wParam参数分别被指定为DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE.此时,lParam参数指向一个DEV_BROADCAST_HDR结构,该结构中的dbch_devicetype成员表识设备的类型,当该值为DBT_DEVTYP_VOLUME时,表明一个带有卷标名的驱动器发生了变化,一般情况下该驱动器既为光驱.
      

  4.   

    谢谢,大家,这个小弟知道了,谢谢
    但是对于USB设备,取不到这两个参数的,这两个参数的值(在WM_DEVICECHANGE)中只会是Wparam=7,Lparam的值=0