Ich habe ein C++ - Programm, das alle Eingabegeräte (mit direkter Eingabe) am Anfang des Programms auflistet. Wenn das Programm gestartet wird und ich dann einen anderen Controller anschließe, wird dieser Controller erst beim Neustart des Programms erkannt. Wer weiß von einem Ereignis, das ich verwenden kann, dass mein Programm alle Geräte aufzählt, nachdem ein neues eingesteckt ist?DirectInput verwenden, um Signal nach dem Einstecken des Joysticks zu empfangen
Antwort
This article beschreibt, wie Game-Pad Änderungen zu erkennen. Zuallererst können Sie die Nachricht WM_DEVICECHANGE
behandeln und wParam
für oder DBT_DEVICEREMOVECOMPLETE
überprüfen. Es scheint, dass, um diese als WPARAM
s zu erhalten, müssen Sie zuerst RegisterDeviceNotification
aufrufen.
das Beispiel des Artikels, wie dies zu tun ist, wie folgt:
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
}
Die einzige andere Sache zu achten ist, dass das minimal unterstützte Betriebssystem für diese XP, so dass Sie in den entsprechenden setzen müssen #define
dafür, bevor Sie die Windows-Header.
Je nachdem, was Sie tun möchten, müssen Sie diese Funktion möglicherweise nicht einmal aufrufen. Stattdessen können Sie einfach DBT_DEVNODES_CHANGED
überprüfen, um nicht zu unterscheiden, ob ein Gerät angeschlossen oder nicht angeschlossen ist. Das könnte etwas Code sparen, wenn es dir egal ist.
Das sieht aus wie es wird es tun! Vielen Dank! – Magn3s1um