首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上检测外部设备插入

在Windows上检测外部设备插入
EN

Stack Overflow用户
提问于 2016-08-03 10:04:20
回答 1查看 1.1K关注 0票数 0

我有点困惑如何用用户插入设备(USB、HID等)的事件通知我的c++应用程序。未定义应用程序类型。我正在尝试玩控制台/仅消息/服务示例应用程序,但没有结果。我正在使用VS2015和Windows 10。

我发现有多种处理它的方法:

  1. 使用像这里这样的WMI。但我真的不明白WMI在哪里。
  2. 使用RegisterDeviceNotification和WM_DEVICECHANGE。据我所知,对于控制台应用程序,只有一次使用GUI (真正的窗口)或只有消息窗口,没有办法做到这一点。我试过最后一个例子来自这个答案,但我的应用程序没有收到任何通知,当我插入我的USB闪存驱动器。我找到了这个答案 (来自与上面提到的答案相同的问题),并尝试使用user32.dll中的ChangeWindowMessageFilterEx()函数与GetProcAddress一起加载它,而无需连接dll到我的应用程序: BOOL InitInstance(HWND hWnd) { HMODULE hDll =GetModuleHandle(文本(“user32.dll”);if (hDll) { typedef (WINAPI* MESSAGEFILTERFUNCEX ))(hWnd hWnd,UINT消息,DWORD操作,无效* pChangeFilterStruct);const DWORD MSGFLT_ALLOW = 1;MESSAGEFILTERFUNCEX ChangeWindowMessageFilterEx= (MESSAGEFILTERFUNCEX)::GetProcAddress(hDll,"ChangeWindowMessageFilterEx");if (ChangeWindowMessageFilterEx)返回函数(hWnd,WM_COPYDATA,MSGFLT_ALLOW,NULL);}返回FALSE;} 这个函数的用法是: hWnd = CreateWindowEx(0,CLS_NAME,"DevNotifWnd",WS_ICONIC,0,0,CW_USEDEFAULT,0,HWND_MESSAGE,NULL,GetModuleHandle(0),(void*)&guid);InitInstance(hWnd); 但没有任何效果。
  3. 使用while(true){...}循环并调用适当的Win API函数,如在这个答案中。但这种方式似乎不是解决我问题的完美办法。

我的问题是

  1. 有人能解释一下什么是最好的方法吗?如果它是第二个与RegisterDeviceNotification,为什么它不工作的情况下,只有消息窗口应用?
  2. 还有其他方法吗?如果没有,我能做些什么,例如,在安装了某些软件时通知应用程序?

如有任何意见,敬请见谅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-05 09:32:35

所以我终于找到了一些问题的答案。

  1. 问题在于我为NotificationFilter提供的GUID。因此,我将其设置为接收来自所有设备的通知,代码为: DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; ZeroMemory(&NotificationFilter,sizeof(NotificationFilter)); NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;//无需设置dbcc_classguid,因为当设置// DEVICE_NOTIFY_ALL_INTERFACE_CLASSES时(见下面一行),HDEVNOTIFY dev_notify = RegisterDeviceNotification(hwnd,&NotificationFilter,DEVICE_NOTIFY_ALL_INTERFACE_CLASSES)被忽略;
  2. 至于应用程序可以注册的窗口中的其他类型的通知,我只找到了一个所有Win32 API函数的部分废弃列表,在那里我找到了一些新的Ctrl+F搜索通知:)

希望这能节省别人的时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38740459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档