PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam 
VB应该如何写,找不到着方法。请高手
BOOL WINAPI DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 BOOL fRet = TRUE; // 返回值
 //通过响应WM_DEVICECHANGE消息得到的设备事件信息结构
 PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
 //对话框消息处理
 switch (uMsg)
 {
  case WM_INITDIALOG:
   fRet = TRUE;
   break;
   //对 WM_DEVICECHANGE 消息进行处理
  case WM_DEVICECHANGE:
  char szMsg[80]; // 对话框中要表示的字符串
   switch (wParam)
   {
    //当一个设备变得被插入并变得可用时,
    //系统会发送广播事件DBT_DEVICEARRIVAL
    case DBT_DEVICEARRIVAL:
     // 判断CDROM碟片是否已经插入到光驱中
     if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) {

解决方案 »

  1.   

    http://www.mvps.org/vbvision/_samples/CD_Monitor_Demo.zip
      

  2.   

    http://www.mvps.org/vbvision/_samples/CD_Monitor_Demo.zip
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  3.   

    谢谢supergreenbean的代码,但是又发现了一个问题就是,当禁止光盘自动运行的时候,这个捕捉就不能生效了,是否有这样的情况,有什么办法解决吗?
      

  4.   

    也就是不自动运行的话,就无法捕获变化的消息对吧.另外这段代码是判断那个光驱符号插入或者弹出光碟的.If c.dbcv_flags And DBTF_MEDIA Then
                            ListBox1.Items.Add("Drive " + FirstDriveFromMask(c.dbcv_unitmask) + ": arrived")
                        End If
                    End IfProtected Function FirstDriveFromMask(ByVal Unit As Int32) As Char
            Dim Ix As Integer
            For Ix = 0 To 25
                If Unit And Ix Then Exit For
                Unit = Unit >> 1
            Next
            Return Chr(Ix + Asc("A"))
        End Function Unit = Unit >> 1 这个运算怎样转成VB的
      

  5.   

    那个是移位运算符http://topic.csdn.net/t/20021106/14/1153344.html