gpt4 book ai didi

c++ - 插入操纵杆后使用 DirectInput 接收信号

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:50 25 4
gpt4 key购买 nike

我有一个 C++ 程序,它在程序开始时枚举所有输入设备(使用直接输入)。如果程序启动,然后我插入另一个 Controller ,则在程序重新启动之前不会识别该 Controller 。有人知道我可以使用的事件会导致我的程序在插入新设备后枚举所有设备吗?

最佳答案

This article讨论如何检测游戏 handle 的变化。首先,您可以处理 WM_DEVICECHANGE 消息并检查 wParam 是否有 DBT_DEVICEARRIVALDBT_DEVICEREMOVECOMPLETE。不过,为了将这些作为 WPARAM 接收,您似乎需要调用 RegisterDeviceNotification首先。

文章中如何做到这一点的示例如下:

DEV_BROADCAST_DEVICEINTERFACE notificationFilter;
ZeroMemory(&notificationFilter, sizeof(notificationFilter));

notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
notificationFilter.dbcc_size = sizeof(notificationFilter);

HDEVNOTIFY hDevNotify;
hDevNotify = RegisterDeviceNotification(m_hWnd, &notificationFilter,
DEVICE_NOTIFY_WINDOW_HANDLE |
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);

if(hDevNotify == NULL) {
// do some error handling
}

唯一需要注意的是,它支持的最低操作系统是 XP,因此您需要在包含 Windows header 之前为此输入适当的 #define

根据您想要执行的操作,您甚至可能不必先调用此函数。相反,您可以只检查 DBT_DEVNODES_CHANGED 以不区分正在插入或拔出的设备。如果您不在乎,那可以节省一些代码。

关于c++ - 插入操纵杆后使用 DirectInput 接收信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com