2013-05-13 8 views
6

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

+0

Wygląda na to, że to zrobi! Dzięki! – Magn3s1um

Odpowiedz

2

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(&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 
} 

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.

Powiązane problemy