Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Können KeyHooks Tastenkombinationen ermitteln? (https://www.delphipraxis.net/214114-koennen-keyhooks-tastenkombinationen-ermitteln.html)

Alallart 18. Nov 2023 10:46

Können KeyHooks Tastenkombinationen ermitteln?
 
Ich beschäftige mich gerade mit mit KeyHooks, um ein Tool zu schreiben, das mir die gerade gedrückten Tasten anzeigt. Soweit, so gut. Nur bekomme ich dabei immer nur die letzte Taste angezeigt, die gedrückt wird. Möchte ich erfassen ob STRG+ALT+ENTF gedrückt wird, bekomme ich die Rückgabewerte STRG, dann ALT, dann ENTF. Ich weiß also zu der Zeit, dass die ENTF Taste gedrückt wird, aber nicht, dass es eine Tastenkombination ist.

Bevor ich also weiter mache, würde ich gerne wissen ob ich auf dem Holzweg bin. Kann man das damit ermitteln, und ich habe nur den falschen Weg gewählt, oder geht es überhaupt nicht? Denn einzelne Tasten bringen mir wenig.

peterbelow 18. Nov 2023 11:32

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
Zitat:

Zitat von Alallart (Beitrag 1529829)
Ich beschäftige mich gerade mit mit KeyHooks, um ein Tool zu schreiben, das mir die gerade gedrückten Tasten anzeigt. Soweit, so gut. Nur bekomme ich dabei immer nur die letzte Taste angezeigt, die gedrückt wird. Möchte ich erfassen ob STRG+ALT+ENTF gedrückt wird, bekomme ich die Rückgabewerte STRG, dann ALT, dann ENTF. Ich weiß also zu der Zeit, dass die ENTF Taste gedrückt wird, aber nicht, dass es eine Tastenkombination ist.

Bevor ich also weiter mache, würde ich gerne wissen ob ich auf dem Holzweg bin. Kann man das damit ermitteln, und ich habe nur den falschen Weg gewählt, oder geht es überhaupt nicht? Denn einzelne Tasten bringen mir wenig.

Siehe GetKeyboardState (API). Du brauchst keinen Hook dafür, frag einfach so alle 100 msecs den Tastaturstatus ab.

rabatscher 19. Nov 2023 10:43

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
Soweit ich weiss ist strg alt entf entwas speziell - es wird sogar ein hardware interrupt erzeugt (zumindest war das mal so..)
eventuell hilft das weiter:

https://stackoverflow.com/questions/...een-is-visible

jaenicke 19. Nov 2023 13:09

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
Du bekommst das Drücken und Loslassen der Tasten einzeln. Im letzten Bit der Flags steht drin, ob die Taste gedrückt oder losgelassen wurde. Du weißt also, wenn noch Tasten gedrückt sind, wenn du dir das merkst.

Zitat:

Zitat von peterbelow (Beitrag 1529830)
Siehe GetKeyboardState (API). Du brauchst keinen Hook dafür, frag einfach so alle 100 msecs den Tastaturstatus ab.

Ein Hook ist aber sinnvoller und einfacher, weil man den Tastendruck direkt mitbekommt.

himitsu 19. Nov 2023 14:03

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
@peterbelow:
Ja, GetKeyboardState und Co. geben zwei Ergebnisse.
* welche Taste/Tasten sind gerade jetzt, ähhh zum Beginn des Message-Events gedrückt gewesen (GetAsynchKeyboardState was wirklich gerade jetzt ist)
* welche Tasten waren seit der letzten Abfrage gewesen

- über einen Timer das "gerade jetzt", kann kürzere Tastendrücke übersehen
- und beim "war gedrückt", ist nicht bekannt, in welcher Reihenfolge das passiert war

- GetKeyboardState ist normal "netter", da es auch beim Debuggen den richtigen Wert liefert
- während GetAsynchKeyboardState für Schleifen (also mehrmals in einem Event oder z.B. in einer Konsolenanwendung)

Alallart 19. Nov 2023 21:38

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
Zitat:

Zitat von jaenicke (Beitrag 1529840)
Du bekommst das Drücken und Loslassen der Tasten einzeln. Im letzten Bit der Flags steht drin, ob die Taste gedrückt oder losgelassen wurde. Du weißt also, wenn noch Tasten gedrückt sind, wenn du dir das merkst.

Jetzt, wo du es sagst, stimmt. Ich könnte bei STRG+ALT+ENTF drauf achten, ob die STRG-Taste losgelassen wurde, bevor die nähste Taste gedrückt wurde. Insoweit hilft mir das kleinwenig. Was ich aber dann doch nicht mitbekomme ist, dass wenn ich nach STRG die ALT-Taste drücke, ich bei der gedrückten ALT-Taste die STRG-Taste loslasse. Das bekomme ich nicht mit.

himitsu 19. Nov 2023 22:41

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
Entweder du merkst dir den Status.
Beim Drücken und Loslassen einer Taste wird gespeichert, ob sie gesetzt ist. (Enum, BitSet oder Booleans)

Außerdem lässt sich der Status dieser Tasten doch jederzeit abfragen. (Strg, Alt, Shift/CapsLock, Print, Rollen, NumLock)

jaenicke 20. Nov 2023 07:03

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
Zitat:

Zitat von Alallart (Beitrag 1529844)
Jetzt, wo du es sagst, stimmt. Ich könnte bei STRG+ALT+ENTF drauf achten, ob die STRG-Taste losgelassen wurde, bevor die nähste Taste gedrückt wurde. Insoweit hilft mir das kleinwenig. Was ich aber dann doch nicht mitbekomme ist, dass wenn ich nach STRG die ALT-Taste drücke, ich bei der gedrückten ALT-Taste die STRG-Taste loslasse. Das bekomme ich nicht mit.

Wo ist das Problem?
Die Reihenfolge ist doch dann:
Strg down
Alt down
Strg up

In dem Moment weißt du also, dass nur noch Alt gedrückt ist.

Alallart 21. Nov 2023 17:53

AW: Können KeyHooks Tastenkombinationen ermitteln?
 
@jaenicke

Tatsächlich, das ist mir gar nicht aufgefallen. Wohl, weil es so schnell geht. Wird STRG-Taste gedrückt, dann ALT-Taste, und wird dann STRG-Taste losgelassen, während die ALT-Taste noch gedrückt wird, kommt tatsächlich kurz die Info (bzw. Bitänderung), dass die STRG-Taste losgelassen wurde.

Da das aber ganz kurz ist, habe ich es nicht bemerkt.

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz