Использование DirectInput для получения сигнала после подключения джойстика

У меня есть программа на C ++, которая перечисляет все устройства ввода (используя прямой ввод) в начале программы. Если программа запускается, а затем я подключаю другой контроллер, этот контроллер не будет распознан, пока программа не будет перезапущена. Кто-нибудь знает событие, которое я могу использовать, которое заставит мою программу перечислять все устройства после того, как новое будет подключено?

6

Решение

Эта статья обсуждает, как обнаружить изменения игровой площадки. Прежде всего, вы можете справиться с WM_DEVICECHANGE сообщение и проверка wParam за DBT_DEVICEARRIVAL или же DBT_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, поэтому вам нужно поставить соответствующую #define для этого, прежде чем включать заголовки Windows.

В зависимости от того, что вы хотите сделать, вам может даже не понадобиться сначала вызывать эту функцию. Вместо этого вы можете просто проверить DBT_DEVNODES_CHANGED не делать различий между подключенным или отключенным устройством. Это может сохранить некоторый код, если вам все равно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector