Aflarea stării actuale a oricărei taste este foarte simplă prin utilizarea API - apelarea funcției GetKeyState. Formatul apelului:
funcția GetKeyState (nVirtKey: Integer): SCURT;
nVirtKey - codul virtual al cheii care ne interesează.
Return - dacă este setat cel mai înalt bit, este apăsată tasta. Cel mai mic bit este setat când cheia este eliberată. Pentru tastele de declanșare, bitul mic indică dacă această tastă de declanșare este activată (adică dacă lumina este aprinsă)
Un exemplu de caracteristică GetKeyState este că starea cheie returnată de această funcție se modifică atunci când un flux de mesaje de la tastatură este citit din coada de mesaje. Funcția GetAsyncKeyState nu depinde de fluxul mesajelor, care este, în unele cazuri, foarte convenabil.
Taste rapide - înregistrare și procesare
Tastele rapide sunt comenzi rapide care sunt înregistrate în sistem și când sunt apăsate, sistemul trimite un mesaj WM_HOTKEY în fereastra a cărei mâner a fost declarat când sa înregistrat tasta rapidă. Nu contează dacă fereastra receptorului are focalizare de intrare și dacă este vizibilă pe ecran. Acest lucru este util în special atunci când scrieți programe care sunt activate atunci când sunt apăsate anumite comenzi rapide de la tastatură (într-o stare inactivă, aplicațiile cum ar fi aplicația nu conțin ferestre vizibile).
Înregistrarea se face utilizând apelul API RegisterHotKey
funcția RegisterHotKey (hWnd: HWND; id: Integer; fmModificatoare, vk: UINT): BOOL;
hWnd - Fereastra de manevră care va primi mesaje când este apăsată tasta rapidă
id este un identificator (doar numărul trimis în mesajul WM_HOTKEY.id permite aplicației să lucreze cu mai multe taste rapide, făcând distincție între ele prin id). Nu puteți defini două taste rapide cu același ID
fsModificatoare - modificatori. Determinați ce taste trebuie să fie apăsate împreună cu vk specificat. Valorile valide sunt: MOD_ALT - ALT, MOD_CONTROL - CTRL, MOD_SHIFT - SHIFT
vk este codul cheii virtuale
Dacă tasta rapidă se poate înregistra, funcția returnează TRUE.
La terminarea aplicației este necesară anularea înregistrării unei taste fierbinți prin intermediul serviciului UnregisterHotKey. Când o apelați, mânerul ferestrei și id-ul tastei rapide sunt trecute.
exemplu:
Interceptarea apăsărilor de taste din cadrul aplicației.
Interceptarea apăsărilor de taste din Windows (cârlig)
Există aplicații care trebuie să intercepteze toate intrările de la tastatură în Windows, chiar dacă o altă aplicație este în prezent activă. Acesta poate fi, de exemplu, un program care comută dispunerea tastaturii, dicționarul rezident sau un program care efectuează alte acțiuni prin apăsarea combinației de taste "fierbinți".
Interceptarea tuturor evenimentelor din Windows (inclusiv evenimente de la tastatură) se face prin apelarea funcției SetWindowsHook (). Această funcție înregistrează un cârlig în sistemul Windows pentru un anumit tip de eveniment / mesaj. O capcană este o procedură de utilizator care va gestiona evenimentul specificat. Principalul lucru este că această procedură trebuie să fie întotdeauna prezentă în memoria Windows. Prin urmare, capcana este plasată în DLL și încărcată în DLL din program. În timp ce cel puțin un program utilizează un DLL, acesta nu poate fi descărcat din memorie. Iată un exemplu de astfel de DLL și programul care o folosește. În exemplu, capcana interceptează intrările de la tastatură și le scrie într-un fișier text
Acest exemplu este cel mai simplu și nu ia în considerare faptul că, atunci când lucrarea este terminată, capcana trebuie eliminată. Când lucrați, se selectează de fiecare dată când apăsați o tastă și resetați parametrii de apel într-un fișier text. Exemplu de lucru, am folosit-o pentru a determina codurile cheie atunci când scriu un driver pentru tastatura multimedia Genius (nativ de altfel, este scris în Delphi, dar curba la urâțenie - ea însăși va atârna, dar computerul se blochează).
Cum să prindeți intrările de la tastatură pentru toate procesele din sistem?