2010-07-17 6 views
5

Come posso rilevare uno o una combinazione di tratti di chiavi in ​​ANSI C e/o con Win32 SDK?Come posso rilevare uno o una combinazione di tratti di chiave in C?

Ad esempio: come posso rilevare CTRL + ALT + CANC è stato premuto?

Si prega di fornire qualche codice sorgente o qualsiasi collegamento web.

Si noti che, sto utilizzando il meccanismo di polling, non l'evento.

Ho bisogno di farlo in modalità console win32.

+1

Potrebbe non essere possibile rilevare CTRL + ALT + CANC da un'applicazione spaziale utente. Viene rilevato e gestito da un driver in modalità kernel. Dovresti scrivere un driver in modalità kernel per intercettare quella combinazione. La maggior parte delle altre combinazioni di tasti dovrebbe essere rilevabile nello spazio utente dal metodo fornito nella risposta di Eli. –

+0

@Amardeep: Non sono sicuro che Autohotkey non possa intercettare CTRL + ALT + CANC. Se possibile, allora è sicuramente più facile che scrivere un driver in modalità kernel –

+1

@Eli - Sei sicuro che non installi o modifichi un kmd? La sicurezza di login di Windows verrebbe compromessa se ctrl-alt-del potrebbe essere intercettato da un'applicazione dello spazio utente senza diritti di amministratore. Penso che sia possibile rilevare la combinazione di tasti, ma probabilmente non prima che il kmd abbia già agito su di esso. –

risposta

1

Con ANSI C è impossibile, poiché ANSI C non definisce alcun metodo per accedere alla tastiera in questo modo. La funzione di livello più basso che riceve input dall'utente è getc che restituisce un carattere dopo che è stato immesso in stdin e che è stato premuto INVIO.

Per quanto riguarda l'API Win32, in effetti ciò può essere fatto. Nella funzione di gestione dei messaggi (WndProc) è necessario guardare i messaggi WM_CHAR. I modificatori ti aiuteranno a vedere se CTRL e MAIUSC sono premuti.


P.S. solo un pensiero, forse quello che stai cercando è uno strumento come Autohotkey?

+0

Ho bisogno di lavorare con main() non WinMain(). Potete fornirmi una soluzione per favore? – anonymous