2013-05-13 9 views
6

Ho un programma C++ che enumera tutti i dispositivi di input (utilizzando l'input diretto) all'inizio del programma. Se il programma viene avviato e quindi collego un altro controller, questo controller non verrà riconosciuto fino al riavvio del programma. Qualcuno sa di un evento che posso usare per far sì che il mio programma enumeri tutti i dispositivi dopo che uno nuovo è stato collegato?Utilizzo di DirectInput per ricevere il segnale dopo aver collegato il joystick

+0

Sembra che lo farà! Grazie! – Magn3s1um

risposta

2

This article discute come rilevare le modifiche del game pad. Innanzitutto, è possibile gestire il messaggio WM_DEVICECHANGE e controllare wParam per DBT_DEVICEARRIVAL o DBT_DEVICEREMOVECOMPLETE. Sembra che per ricevere questi come WPARAM s, tuttavia, è necessario chiamare prima RegisterDeviceNotification.

esempio del articolo di come fare questo è la seguente:

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 
} 

L'unica altra cosa a cui fare attenzione è che il sistema operativo minimo supportato per questo è XP, quindi è necessario mettere in adeguato #define prima di includere le intestazioni di Windows.

A seconda di ciò che si desidera fare, è possibile che non si debba chiamare prima questa funzione. Invece, puoi semplicemente controllare DBT_DEVNODES_CHANGED per non distinguere tra un dispositivo collegato o scollegato. Questo potrebbe salvare del codice se non ti interessa.

Problemi correlati