MFC C++ 通过 WM_DEVICECHANGE 通知区分两个设备
Posted
技术标签:
【中文标题】MFC C++ 通过 WM_DEVICECHANGE 通知区分两个设备【英文标题】:MFC C++ differentiate between two devices from WM_DEVICECHANGE notifications 【发布时间】:2020-03-04 07:41:38 【问题描述】:我正在编写一个函数来检测在 Windows 中使用 C++ VS2019 添加/删除 USB 设备。 WM_DEVICECHANGE 会在设备被移除或连接到 PC 时发出通知,但它会为单个设备提供多个通知。通过返回的参数对于所有通知也是相同的。
问题是当2个设备一个接一个连接或移除时,通知数量增加但参数保持不变。如何区分通知来自不同的设备。
BEGIN_MESSAGE_MAP(CCheckDlg, CDialogEx)
ON_MESSAGE(WM_DEVICECHANGE, &CCheckDlg::OnMyDeviceChange)
END_MESSAGE_MAP()
功能:
LRESULT CCheckDlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
//When USB device connected or removed,
//The wParam is always equal to 7 and lParam is equal to 0.
或者,如果有任何其他方法可以使用 C++ 检测设备添加/移除,您可以提出建议。
谢谢。
【问题讨论】:
【参考方案1】:WM_DEVICECHANGE 消息的wParam
包含触发此消息的特定事件。 7
的值是指DBT_DEVNODES_CHANGED
事件。
DBT_DEVNODES_CHANGED 的文档说明:
没有关于哪个设备已添加到系统或从系统中删除的其他信息。需要更多信息的应用程序应使用RegisterDeviceNotification 函数注册设备通知。
【讨论】:
以上是关于MFC C++ 通过 WM_DEVICECHANGE 通知区分两个设备的主要内容,如果未能解决你的问题,请参考以下文章
使用 Microsoft Visual C++ MFC 2021 进行编程
C++ MFC 命名线程,以便 Procmon 可以看到它们