如果一个外部设备(比如我自己做的一个USB接口的设备)在我的应用程序运行中被拔下,那我显然要对此做处理,但是在这种情况下,系统发送的是什么消息呢??重新插上的时候又会发送什么消息呢?谢谢!!
解决方案 »
- CMFCRibbonApplicationButton
- 我的非模式对话框不能够正常显示了
- 大量内存分配的问题
- 访问SQL Server效率最高的是哪种方法?
- 窗口覆盖问题
- 关于IE做ActiveX的容器不同之处问题
- 是应该先学数据结构?还是VC?
- vc编译程序时,出现头文件中的很多语法错误,明明是厂商提供的,为什么会有这样的情况?
- 2>LINK : fatal error LNK1104: 无法打开文件“.\debug\xmltostr.lib”
- 微软会把过时的VS和SDK下载扔在哪个页面中?
- 请问在发送方发过来的数据长度大于,我缓冲区一次能读取的数据量,是不是可以循环读取?
- 若dll中用到了MFC类(该DLL不是MFC extension dll), 该DLL可以被其他语言调用吗?
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;
}
}
.
.
.
}
}
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决定成功与否对于发送什么消息楼上的代码就是了