如果一个外部设备(比如我自己做的一个USB接口的设备)在我的应用程序运行中被拔下,那我显然要对此做处理,但是在这种情况下,系统发送的是什么消息呢??重新插上的时候又会发送什么消息呢?谢谢!!

解决方案 »

  1.   

    C++] 
    Because universal serial bus (USB) devices can be added to and removed from the system without rebooting, you might want your application to be able to respond to a new configuration of input devices. For example, you might allow a new player to join a game in progress by plugging in another controller. To receive a message when a device is changed, you must first register for notification, as in the following code example:PVOID hNotifyDevNode;
     
    void RegisterForDevChange(HWND hDlg, PVOID *hNotifyDevNode)
    {
        DEV_BROADCAST_DEVICEINTERFACE *pFilterData = 
               (DEV_BROADCAST_DEVICEINTERFACE*) 
               _alloca(sizeof(DEV_BROADCAST_DEVICEINTERFACE));
        ASSERT (pFilterData);
     
        ZeroMemory(pFilterData, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
     
        pFilterData->dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
        pFilterData->dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
        pFilterData->dbcc_classguid  = GUID_CLASS_INPUT; 
     
        *hNotifyDevNode = RegisterDeviceNotification(hDlg, pFilterData,
                DEVICE_NOTIFY_WINDOW_HANDLE);
    }
    Then, in your main window procedure, check for messages announcing that a device has been attached, is about to be removed, or has been removed, as follows:MyWindowProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (nMsg)
        {
            case WM_DEVICECHANGE:
            {
                switch (wParam)
                {
                    case DBT_DEVICEARRIVAL:
                        // Handle device arrival
                        break;                case DBT_DEVICEQUERYREMOVE:
                        // Handle device removal request
                        break;
                    
                    case DBT_DEVICEREMOVECOMPLETE:
                        // Handle device removal
                        break;
                }
            }
    .
    .
    .
        }
    }
      

  2.   

    你是否是通过DeviceIoControl这个函数来做判断呢,
    HostControllerHandle = CreateFile( "\\\\.\\HCD1",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|FILE_SHARE_READ, 0,OPEN_EXISTING,0,0);Success = DeviceIoControl(HostControllerHandle, IOCTL_GET_HCD_DRIVERKEY_NAME, &UnicodeName,sizeof(UnicodeName),&UnicodeName, sizeof(UnicodeName), &BytesReturned, NULL);
    Success决定成功与否对于发送什么消息楼上的代码就是了