![]() |
GetAsyncKeyState
neue Frage neues Thema :D
Geht im Endeffekt um dieses Programm ich möchte mittels GetAsyncKeyState die Kombination ALT + S abfangen so wie ich es bei dem Link schon mit F10 mache das ganze schaut so aus
Delphi-Quellcode:
nur um mal die ALT-Taste abzufragen, allerdings geht schon das nicht, wen ich dann die alt-taste drücke wechslet Windows die fenster durch, also alle offenen programme werden pro klick der reihe nach durchgegangen
if GetAsyncKeyState(VK_LMENU) < 0 then
das nächste Problem ist das ich auch S prüfen möchte VK_S geht da aber leider nicht, kennt delphi nicht und ein drücken von F1 hilt auch nicht weiter Also wie prüfe ich ob ALT + S gedrückt wird ? |
Re: GetAsyncKeyState
schau dir mal die Hilfe zu GetAsyncKeyState an. Da steht auch wie die prüfst ob eine Taste gedrückt ist oder nicht.
Zitat:
Delphi-Quellcode:
if (GetAsyncKeyState(VK_MENU) and 1 <> 0) then
ShowMessage('Key is down') else ShowMessage('Key is up'); |
Re: GetAsyncKeyState
S hat den ASCII-Wert 115 (s) und 83 (S) falls dir das hilft!
|
Re: GetAsyncKeyState
Der ASCII-Wert ist irrelevant, er braucht den virtuellen Tastencode, und das ist Ord('S')=83.
Der ASCII-Wert wird erst später gebildet. BTW: Bei mir wechselt Windows nicht bei ALT zu, sondern bei ALT+TAB. Achja und übrigens: Wenn das höchste Bit gesetzt ist, dann ist das Ergebnis von GetAsyncKeyState IMMER <0, daher ist das schon richtig. |
Re: GetAsyncKeyState
Delphi-Quellcode:
bewirkt leider nicht das ausführen des programms, wird nur der eintrag in der menüliste blau hinterlegt
if (GetAsyncKeyState(VK_MENU) and 1 <> 0) then
|
Re: GetAsyncKeyState
Natürlich nicht.
Wenn die Taste gedrückt ist, steht in GetAsyncKeyState: 10000000 00000000 Und dann machst du and 1? Mach halt einfach <0, dann passt das. Oder gleich: if GetAsyncKeyState(myKey)=low(SmallInt) then... |
Re: GetAsyncKeyState
das war nicht mein code sondern der tipp etwas weiter oben ;)
Delphi-Quellcode:
hatte ich ja bereits im ersten posting erwähnt das dies nicht funktioniert wie es soll
if GetAsyncKeyState(VK_LMENU) < 0 then
ziel ist es das das funktioniert:
Delphi-Quellcode:
was dementsprechnd ja auch nicht funktioniert, GetAsyncKeyState(Ord('S') einzeln funktioniert hingegen, nur die ALT-taste nicht die macht das was ich oben beschrieben habe
if (GetAsyncKeyState(VK_LMENU) < 0) and (GetAsyncKeyState(Ord('S')) < 0) then
|
Re: GetAsyncKeyState
hast du mal meine Antwort gelesen?!
|
Re: GetAsyncKeyState
öhm... du willst den key "abfangen".
Heisst das auch "unterdrücken"? Und im übrigen passt GetAsyncKeyState ( ja, <0 stimmt) so gar nicht zum event-driven model.... fang lieber OnKeyDown ab. falls das genau das ist, was du tust:
Delphi-Quellcode:
Solls so sein? oder bist du in einem loop?
procedure TForm1.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if (Key = VK_S) and ((GetAsyncKeyState(VK_MENU) < 0) or (ssAlt in Shift)) then //man beachte das or! ShowMessage('Alt+S gedrückt!'); end; Zeig mal ein bisschem mehr Code. @SirT: Irrelevant. <0 geht auch. |
Re: GetAsyncKeyState
@ SirThornberry
ja und probiert und wurde wegen dem Code von 3_of_8 zurechtgewiesen das dies falsch sein ;) @ DGL-luke OnKeyDown wird mir nichts bringen, das programm arbeitet im hintergrund im systray und sol systemweit (eigendlich nur im Opera) ALT + S abfangen, mehr code gibts im link im ersten posting, oder hier
Delphi-Quellcode:
also wie gesagt ich will im endeffekt das ALT + S waomit man im IE und im Firefox z.b. das Posting abschickt simulieren, geht ja auch mit F10 nur halt nicht mit der ALT-Taste, das ist mein einziges Problem
procedure TForm1.Timer1Timer(Sender: TObject);
var TheWindowHandle: THandle; begin //if (GetAsyncKeyState(vk_Shift) < 0) AND (GetAsyncKeyState(VK_F10) < 0) then //if GetAsyncKeyState(VK_F10) < 0 then //if (GetAsyncKeyState(VK_CONTROL) < 0) AND (GetAsyncKeyState(VK_F10) < 0) then if GetAsyncKeyState(VK_F10) < 0 then //if (GetAsyncKeyState(VK_LMENU) < 0) and (GetAsyncKeyState(Ord('S')) < 0) then // if GetAsyncKeyState(VK_LMENU) < 0 then //if (GetAsyncKeyState(VK_MENU) and 1 <> 0) then //if GetAsyncKeyState(Ord('S')) < 0 then begin TheWindowHandle:=FindAWindow('Opera', ''); if TheWindowHandle=0 then begin ShowMessage('Opera ist nicht geöffnet') end else begin setforegroundwindow(TheWindowHandle); keybd_event(VK_SHIFT, 0, 0, 0 ); keybd_event(VK_ESCAPE, 0, 0, 0 ); sendkeys('{S}', false); // Tasten wieder loslassen keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); // ne kleine Pause sleep(1000); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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 by Thomas Breitkreuz