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
risposta
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(¬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
}
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.
- 1. Utilizzo di Auto e Lambda per gestire il segnale?
- 2. Rotolo il mio driver HID per joystick di Windows?
- 3. APPLE MACH-O COLLEGATO ERRORE Dopo aver aggiunto AFNetworking
- 4. Devo usare DirectInput o il loop dei messaggi di Windows?
- 5. Rendere il contenuto dopo aver ingrandito UIScrollView
- 6. window.onload equivalente dopo aver modificato il DOM?
- 7. Supporto per joystick in Java
- 8. Seleziona2: opzione di aggiornamento dopo aver selezionato il nuovo tag
- 9. Ridefinire le viste dopo aver cambiato il modello
- 10. PHP: visualizza il contenuto dopo aver forzato il download?
- 11. Il contenuto della scheda rimane visibile dopo aver modificato la scheda dopo il cambio di orientamento
- 12. Perché il costruttore di stringhe smette di aggiungere elementi dopo aver usato il carattere null?
- 13. Fai twilio lasciare un messaggio dopo il segnale acustico
- 14. Conservare il buffer di annullamento dopo aver chiuso VIM?
- 15. Evita di stampare dopo aver eseguito il comando nella console
- 16. Cosa fare dopo aver imparato il PHP di base?
- 17. Perché QObject ha distrutto il segnale chiamato DOPO la distruzione?
- 18. Laggs di gioco dopo aver iniettato il mio codice
- 19. Qt "errore di riferimento non definito del segnale" dopo aver ereditato da QObject
- 20. Come silenziare il segnale acustico per SpeechRecognizer?
- 21. Dopo aver collegato un file simbolico, come faccio a ottenere il percorso del file originale in Ruby?
- 22. Il browser Android aggiorna la pagina dopo aver selezionato il file tramite l'elemento di input
- 23. Come rilevare se il cavo HDMI è collegato alla scheda PCMCIA/nessun segnale?
- 24. segnale di chiamata dopo la forcella
- 25. zip variabile vuota dopo il primo utilizzo
- 26. Cambia il testo del pulsante dopo il clic, quindi ripristinalo dopo aver fatto nuovamente clic
- 27. HighCharts: Come utilizzare il reflow per consentire il ridimensionamento automatico dopo aver modificato la dimensione
- 28. come riattivare il default dopo aver fatto event.preventDefault()
- 29. Il segnale 3.0 beta è ancora disponibile per il 2015?
- 30. Hadoop lanciando java.lang.VerifyError dopo aver esportato il file jar
Sembra che lo farà! Grazie! – Magn3s1um