Domanda

RISPOSTA: Non c'è un modo nativo gestito equivalente per questo metodo. Tuttavia, un codice API buon esempio gestito può essere rilevato in all'indirizzo pinvoke.net .

Ciao a tutti

Ho un'applicazione che accetta una bandiera per la 'modalità traccia'. Trace giri modalità in un modulo che contiene una casella di testo. L'uscita casella di testo visualizza tramite un oggetto TraceListener personalizzato. Se si è in presenza -t sulla riga di comando, la finestra di traccia sarà aperta all'interno di un proprio filo a bassa priorità. E 'utile per i consulenti che stanno cercando di diagnosticare l'applicazione quando qualcosa va storto.

Alcuni consulenti hanno chiesto che premendo qualche combinazione di tasti oscura durante l'avvio dovrebbe attivare la modalità di traccia in modo che non devono andare alla riga di comando per attivarlo ogni volta. E 'una richiesta ragionevole.

Non voglio dare loro una voce di pulsante o di menu per questo, perché un sacco di informazioni critiche che i consulenti si preoccupano viene visualizzato a Trace all'avvio prima della creazione del modulo principale, come i vari componenti sono istanziati e inizializzato.

Ho pensato che avrebbe dovuto essere abbastanza semplice per rilevare lo stato della tastiera corrente in .NET - ma sembra che ovunque guardo, il consiglio è di usare [DllImport ( "user32.dll", EntryPoint = "GetKeyboardState", SetLastError = true)] come metodo per rilevare cosa sta succedendo.

Questo è tutto bene - mi sento a mio agio con questo. Tuttavia, come regola generale cerco di fare in modo che uso NET codice nativo gestito per funzioni di Windows prima di andare provare a rotolare il mio.

Esiste un metodo nativo .NET o equivalente di user32.dll GetKeyboardState?

È stato utile?

Soluzione

Control.ModiferKeys è una proprietà statica di Control che, se le chiavi, modificatori sono attualmente premuti. Io non sono a conoscenza di nulla per ottenere lo stato di tastiera generale, sembra che il codice più P / Invoke sia con GetKeyboardState o GetKeyState per il controllo di tasti specifici.

Altri suggerimenti

Sei sicuro che PreviewKeyDownEventArgs non hai quello che ti serve? Se è così, allora si può utilizzare l'evento PreviewKeyDown.

Un'altra opzione potrebbe essere Tasti di scelta rapida. Una funzione API di Windows può utilizzare una tabella acceleratore in risorse dell'applicazione per mappare le sequenze di tastiera per i comandi, in cui un comando è la stessa cosa che una voce di menu fa; si sa, un messaggio WM_COMMAND. So che è facile da fare in MFC utilizzando C ++, ma quando ho cercato di trovare il C # modo per farlo, mi sono perso. Se si riesce a capire come fare tasti di scelta rapida utilizzando C # allora potrebbe essere una soluzione flessibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top