Più tastiere e basso livello di ganci
Domanda
Ho un sistema dove ho più tastiere e davvero bisogno di sapere che tastiera il tasto corsa è venuta da.Per spiegare il set up:
- Ho un normale PC e tastiera USB
- Ho un monitor esterno VGA schermo con un po ' di hard-chiavi
- I tasti sono mappati come standard USB tastiera, l'invio di un numero limitato di codici (F1, F2, Ritorno, + e -)
Ho un hook di basso livello (in C#, ma in realtà chiamando su Win32 funzionalità), che è in grado di trattare l'ingresso, anche se la mia domanda non è a fuoco.
Il problema è che quando si utilizza la tastiera normale, alcuni mappate in chiave-codici raccolto mediante l'applicazione viene guidato su schermo esterno.Uno dei principali macchine da stampa inviati da schermo esterno e utilizzato per la conferma è VK_RETURN.A meno che non sono in grado di identificare il "dispositivo" e filtro su di esso, l'utente potrebbe essere l'esecuzione di azioni e di conferma sullo schermo di un loro nemmeno guardando.
Come faccio a sapere che tastiera è stato responsabile per la chiave-premere?
Soluzione
Sì, io trovo corretto, il mio male, di imparare qualcosa di nuovo ogni giorno.
Ecco il mio tentativo di fare per essa :) :
Registrare i dispositivi che si desidera utilizzare per il raw input (la tastiera) con ::RegisterRawInputDevices().
È possibile ottenere questi dispositivi di GetRawInputDeviceList()
Dopo aver registrato il vostro dispositivo, sarà iniziare a WM_INPUT messaggi.
LParam del WM_INPUT messaggio contiene un RAWKEYBOARD struttura che è possibile utilizzare per determinare la tastiera, in cui l'input è venuto da, più virtuale codice e il tipo di messaggio (WM_KEYDOWN, WM_KEYUP, ...)
Così si può impostare una bandiera di cui l'ultimo messaggio è venuto da e poi la spedizione per regolare l'input da tastiera gestori.
Altri suggerimenti
Nessun modo per fare questo.Windows abstract questo lavoro per voi.Come accennato, è necessario scrivere/modificare un driver di periferica.