Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi GetAsyncKeyState und Keybd_Event richtig verwenden (https://www.delphipraxis.net/89526-getasynckeystate-und-keybd_event-richtig-verwenden.html)

TheAn00bis 1. Apr 2007 20:06


GetAsyncKeyState und Keybd_Event richtig verwenden
 
Hey,

[verdammter Browser, musste das zwei mal schreiben - grrrr...]

ich möchte immer wenn die CTRL-Taste gedrückt wird die Leertaste virtuell drücken.

Dazu verwende ich momentan folgenden Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if enabled then enabled := false
    else enabled := true;
while enabled do
begin
      if (GetAsyncKeyState(VK_CONTROL) and $8000) <> 0 then Keybd_Event(VK_SPACE,0,0,0);
      Application.ProcessMessages;
end
end;
Ist unschön und aufwändig, aber es soll schnell gehen und ich hab mich noch nie mit Hooks befasst.
Allerdings wird VK_SPACE nicht einmal, sondern ca. 100mal gesendet.

Warum?

bitsetter 2. Apr 2007 00:15

Re: GetAsyncKeyState und Keybd_Event richtig verwenden
 
Hallo,

ich habe mal deinen Code getestet das kürzeste was ich geschafft habe war das VK_SPACE 15 mal betätigt wurde. Die Schleife läuft eben so schnell, dass man die CTRL-Taste gar nicht so schnell loslassen kann. Wenn man CTRL- ein paar Sekunden lang gedrückt hält, wird VK_SPACE gleich mehrere tausend mal gesendet.

TheAn00bis 3. Apr 2007 12:29

Re: GetAsyncKeyState und Keybd_Event richtig verwenden
 
Danke, ich hätte mir die Dokumentation zu "GetAsyncKeyState" richtig durchlesen müssen.

Gut, dann werde ich das entweder dahingehend ändern, dass nur alle x-Loops abgefragt wird, ob die Taste gedrückt wurde, oder doch auf einen Hook umsteigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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