如何监听usb hub和读卡器之类的usb硬件插入拔出消息?

雷宗堂 2012-08-31 11:38:29
我使用RegisterDeviceNotification监听了{ 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }这个类型的硬件消息,结果发现读卡器和usb hub都没有监听到,反而是usb hub连电脑,然后读卡器插入usb hub的消息能被捕获到,这是怎么回事?要怎么样才能直接捕获到读卡器的消息呢?
...全文
369 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
guyunchuxiu1993 2014-09-14
  • 打赏
  • 举报
回复
引用 6 楼 tzleo 的回复:
我自己查到了,可以用GUID_DEVINTERFACE_USB_HUB,在usbiodef.h里有定义
求个具体代码?
雷宗堂 2012-09-03
  • 打赏
  • 举报
回复
我自己查到了,可以用GUID_DEVINTERFACE_USB_HUB,在usbiodef.h里有定义
雷宗堂 2012-09-03
  • 打赏
  • 举报
回复
WM_DEVICECHANGE当然可以收到,但是不能收到DBT_DEVICEARRIVAL或DBT_DEVICEREMOVEPENDING,也就不能获取设备信息了。这样根本没意义,任何设备都会触发WM_DEVICECHANGE消息,这个我还是知道的
Gloveing 2012-08-31
  • 打赏
  • 举报
回复
那一段改成这样这样试试有没有消息?
case WM_DEVICECHANGE: 
::MessageBox(NULL,"检测到","waring",MB_ICONWARNING);
雷宗堂 2012-08-31
  • 打赏
  • 举报
回复
来个知道的人吧~~
雷宗堂 2012-08-31
  • 打赏
  • 举报
回复
这个我知道,问题是USB hub插入的时候并没有DBT_DEVICEARRIVAL或DBT_DEVICEREMOVEPENDING的消息出现
Gloveing 2012-08-31
  • 打赏
  • 举报
回复
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

char *str = "WM_DEVICECHANGE" ;

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, "检测U盘" , strlen("检测U盘"), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;

////////////////////////////////////////////////////////////
case WM_DEVICECHANGE:
if (DBT_DEVICEARRIVAL==wParam )
::MessageBox(NULL,"U盘插入","waring",MB_ICONWARNING);
else if (DBT_DEVICEREMOVEPENDING==wParam || DBT_DEVICEREMOVECOMPLETE ==wParam)
::MessageBox(NULL,"U盘拔出","waring",MB_ICONWARNING);

////////////////////////////////////////////////////////////
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

检测WM_DEVICECHANGE消息

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧