Pagina personala shra, freelancer blog, dezvoltator web in PHP. Aici împărtășesc experiența și gândurile mele, fac experimente pe oameni, colectez dovezi intangibile ale prostiei mele. Utilizând eșantioane de cod din acest site, vă asumați întreaga responsabilitate pentru posibilele consecințe ale utilizării acestora, inclusiv asupra sănătății dvs. mintale și asupra intereselor terților.
Blog / Delphi / Citirea intrărilor de taste și a stării tastaturii
Delphi implementează diverse evenimente în obiectele elementelor de interfață - inclusiv intrările de la tastatură. Dar vom obține deja coduri specifice ASCII, în timp ce aplicația ar trebui să păstreze concentrarea de intrare. Cum pot lucra cu starea tastaturii fără evenimente onkey și pentru a obține informații despre stadiile cheie chiar fără a avea focalizarea pe intrare?
Pentru ce poate fi necesar? Aplicațiile care citesc tastatura fără a avea o intrare de focalizare, în general, sunt destul de suspecte. Ele produc o reacție corespunzătoare în algoritmii euristici ai programelor antivirus.
Pentru a citi tastatura fără a vă concentra atenția la intrarea de care aveți nevoie, de exemplu, o astfel de aplicație cunoscută de mai mulți switch-uri punto.
Și eu, când am scris mult timp pilotul programului UO shra. pentru programarea și rularea macro-urilor în Ultima Online. Acolo a trebuit să fixez fereastra "pilotului" panoului de control deasupra tuturor ferestrelor, tk. pentru a rula scriptul pe care trebuie să faceți clic pe butonul corespunzător de pe panou. Acum aș fi făcut altfel, de exemplu, am repetat apelul de script-uri pentru tastele funcționale sau combinațiile lor.
Luați în considerare funcțiile de bază pe care le oferă bibliotecile OS.
Iată câteva caracteristici interesante care alcătuiesc USER32.dll. În Delphi, ele sunt declarate în programul de ferestre.
Două funcții citesc starea unei anumite taste, iar a treia citește starea întregii tastaturi simultan la tamponul de memorie specificat (256 octeți).
funcția GetKeyState (virtKey: Integer);
funcția GetAsyncKeyState (cheie: Integer);
funcția GetKeyboardState (var: KeyState: Byte);
Deoarece funcțiile returnează "ce" stau, se pune întrebarea cum să lucrați cu ele.
Cum să verificați dacă butonul virtual este apăsat sau nu?
Astfel puteți verifica dacă tasta "Shift left" este apăsată sau nu: