我有一个C++程序,它在程序开始时枚举所有输入设备(使用直接输入).如果程序启动,然后我插入另一个控制器,则在重新启动程序之前将无法识别该控制器.任何人都知道我可以使用的事件会导致我的程序在插入新设备后枚举所有设备吗?
本文讨论如何检测游戏手柄的变化。首先,您可以处理WM_DEVICECHANGE消息并wParam检查DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE。不过,似乎为了将这些作为WPARAMs 接收,您需要RegisterDeviceNotification先调用。
本文的示例说明了如何执行此操作,如下所示:
DEV_BROADCAST_DEVICEINTERFACE notificationFilter;
ZeroMemory(¬ificationFilter, sizeof(notificationFilter));
notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
notificationFilter.dbcc_size = sizeof(notificationFilter);
HDEVNOTIFY hDevNotify;
hDevNotify = RegisterDeviceNotification(m_hWnd, ¬ificationFilter,
DEVICE_NOTIFY_WINDOW_HANDLE |
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);
if(hDevNotify == NULL) {
// do some error handling
}
Run Code Online (Sandbox Code Playgroud)
#define唯一需要注意的另一件事是,支持的最低操作系统是 XP,因此您需要在包含 Windows 标头之前输入适当的操作系统。
根据您想要执行的操作,您甚至可能不必先调用此函数。相反,您可以检查DBT_DEVNODES_CHANGED不区分正在插入或拔出的设备。如果您不关心的话,这可以节省一些代码。