AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetAsyncKeyState

Ein Thema von Nisbo · begonnen am 20. Aug 2006 · letzter Beitrag vom 21. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#1

GetAsyncKeyState

  Alt 20. Aug 2006, 21:03
neue Frage neues Thema

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

if GetAsyncKeyState(VK_LMENU) < 0 then 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

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 ?
Jens
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 21:08
schau dir mal die Hilfe zu GetAsyncKeyState an. Da steht auch wie die prüfst ob eine Taste gedrückt ist oder nicht.
Zitat:
...If the most significant bit is set, the key is down,...
daraus folgt
Delphi-Quellcode:
if (GetAsyncKeyState(VK_MENU) and 1 <> 0) then
  ShowMessage('Key is down')
else
  ShowMessage('Key is up');
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#3

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 21:10
S hat den ASCII-Wert 115 (s) und 83 (S) falls dir das hilft!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 21:21
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#5

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 22:30
if (GetAsyncKeyState(VK_MENU) and 1 <> 0) then bewirkt leider nicht das ausführen des programms, wird nur der eintrag in der menüliste blau hinterlegt
Jens
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 22:56
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...
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#7

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 23:05
das war nicht mein code sondern der tipp etwas weiter oben

if GetAsyncKeyState(VK_LMENU) < 0 then hatte ich ja bereits im ersten posting erwähnt das dies nicht funktioniert wie es soll

ziel ist es das das funktioniert:
if (GetAsyncKeyState(VK_LMENU) < 0) and (GetAsyncKeyState(Ord('S')) < 0) then 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
Jens
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 23:11
hast du mal meine Antwort gelesen?!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 23:15
ö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:
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;
Solls so sein? oder bist du in einem loop?

Zeig mal ein bisschem mehr Code.

@SirT: Irrelevant. <0 geht auch.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#10

Re: GetAsyncKeyState

  Alt 20. Aug 2006, 23:29
@ 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:
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;
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
Jens
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 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