![]() |
IsPressed - Maus -/ Tastendrücke global abfragen ohne hooks
Hi
Ich wollte neulich mit meinem Programm abfragen, ob die linke Maustaste gedrückt wurde. Nach etlichen Versuchen mit hooks, die 1. komplieziert waren und 2. nicht funktioniert haben habe ich eine Funktion in der user32.dll gefunden, die alles hat was ich brauchte, wenn man die Rückgabewerte richtig behandelt. Hier will ich diese Funktion nun mal Vorführen, füe die denen es auch zu blöd, zu kompliziert und zu schreibintensiv ist Hooks zu verwenden. Zuerst die Unit für die DLL:
Delphi-Quellcode:
Und jetzt die Funktion zum Aufrufen und Verarbeiten des Results:
unit DLLLoadUnit;
interface function GetAsyncKeyState(key : Cardinal) : integer; implementation function GetAsyncKeyState(key : Cardinal) : integer; external 'user32.dll'; end.
Delphi-Quellcode:
In einer While Schleife beispielsweise kann man nun abfragen ob die linke Maustaste (VK_LBUTTON) gedrückt wurde.
function IsPressed(key : Cardinal) : integer ;
var DLLResult: integer; begin Result := 0; DLLResult := GetAsyncKeyState(key); If DLLResult And $8000 = $8000 Then Result := 1; end; Als Parameter können ![]() Der Klick oder Tastendruck wird trotzdem an der Stelle ausgeführt und nicht etwa verhindert. Ich hoffe ich konnte jemandem helfen. mfg eagle |
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
Wozu die DLLLoadUni? GetAsyncKeyState ist doch schon in Windows.pas deklariert.
|
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
K das wusste ich nicht aber das ist ja auch nicht das wichtigste
|
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
Zitat:
|
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
Um die DLL zu laden. Ich mach das immer in extra-Units
|
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
Die IsPressed Funktion lässt sich auch um einiges verkürzen:
Delphi-Quellcode:
function IsPressed(key : Cardinal) : boolean;
begin result := (GetAsyncKeyState(key) and $8000) = $8000; end; |
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
und was ist der Unterschied zu
Delphi-Quellcode:
Gibt doch auch 1 (oder True) aus, wenn entsprechende Taste gedrückt wird. Wie schon gesagt wurde, ist die Dll-Funktion ja schon in Delphi's Unit Windows importiert :gruebel:
uses
Windows; [...] function IsPressed(Key : Integer) : ShortInt; begin Result := GetAsyncKeyState(Key); end; |
Re: IsPressed - Maus -/ Tastendrücke global abfragen ohne ho
Das gibt aber auch dann 1 aus, wenn die Taste zwischen dem letzten Aufruf und diesem Aufruf gedrückt wurde.
Es gibt alse auch 1 aus wenn die funktion durch einen Buttonklick aufgerufen wurde |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz