Mam program C++, który wylicza wszystkie urządzenia wejściowe (za pomocą wejścia bezpośredniego) na początku programu. Jeśli program zostanie uruchomiony, a następnie podłączę inny kontroler, kontroler ten nie zostanie rozpoznany do czasu ponownego uruchomienia programu. Ktoś wie o zdarzeniu, które mogę wykorzystać, aby mój program wyliczył wszystkie urządzenia po podłączeniu nowego?Używanie DirectInput do odbierania sygnału po podłączeniu joysticka
Odpowiedz
This article omawia sposób wykrywania zmian padów w pendrive. Przede wszystkim można obsłużyć wiadomość WM_DEVICECHANGE
i sprawdzić wParam
dla DBT_DEVICEARRIVAL
lub DBT_DEVICEREMOVECOMPLETE
. Wygląda na to, że aby je otrzymać jako WPARAM
, musisz najpierw zadzwonić pod numer RegisterDeviceNotification
.
Przykład artykułu o tym, jak to zrobić w następujący sposób:
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
}
Jedyną rzeczą, aby zwrócić uwagę na to, że minimalna obsługiwana OS za to XP, więc trzeba umieścić w odpowiednim #define
do tego przed włączeniem nagłówków Windows.
W zależności od tego, co chcesz zrobić, możesz nawet nie zadzwonić do tej funkcji. Zamiast tego możesz po prostu sprawdzić, czy DBT_DEVNODES_CHANGED
nie rozróżnia urządzenia podłączanego lub odłączonego. To może zaoszczędzić trochę kodu, jeśli cię to nie obchodzi.
Wygląda na to, że to zrobi! Dzięki! – Magn3s1um