Entwickler-Ecke

Sonstiges (Delphi) - prozessübergreifendes keydown/keyup


Gabbergandalf - So 10.09.06 22:21
Titel: prozessübergreifendes keydown/keyup
ich habe in meinem projekt eine prozedur, die auf einen drück von leertaste 'y' ausgeben soll. nur möchte ich, dass eben diese y's auch bei einem druck auf die leertaste ausgegeben werden, wenn das laufende projekt minimiert ist. bitte nicht nur als antwort 'globale hooks' geben , soweit weiß ich auch schon bescheid :P . ich weiß halt nur nicht wie man diese benutzt/in das programm einbindet.

ps.: das tut von assarbad kenn ich, aba irgendwie kapier ichs nicht ^^ :?: :oops: :?:


so siehts atm aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
 begin
 if (Key = ord(' ')) then timer1.enabled := true
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (Key = ord(' ')) then timer1.enabled := false;
end;

(pro timertick wird denne ein y geschrieben)

/E: die frage ist: was genau muss in den code/ins unit alles rein damit globale hooks funzen?

so long - Bert *auf hilfe hoff* :roll:

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


Martok - So 10.09.06 22:52

Assarbads Tutorials versteh ich auch nie!

Hier mal ein Beispielcode. Es wird ein Timer benutzt, der immer an ist und ein kurzes Intervall hat (so wie deiner)

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetAsyncKeyState(VK_SPACE)<>0 then 
    Windows.Beep(800,10);  //hier wäre dann "y"-senden drin
end;


Da der Timer auch minimiert weiterläuft, wird auch immer wieder überprüft, ob die Leertaste unten ist. Daher braucht man keine komplizierten Hooks. Das funktionier aber nur, weil du sowieso einen Timer nutzt. Für Systemweite Hotkeys wäre RegisterHotkey sinnvoller.

Das Zeichen senden scheinst du ja schon zu haben, an sonsten findest du über die Suche hier einiges.

HTH,
Martok


Gabbergandalf - Mo 11.09.06 08:55
Titel: juhu dankö ^^
gut das du für mich ne ausnahme gemacht hast :flehan:

endlich funzt es ^^


Gausi - Mo 11.09.06 09:09

Nur zum Verständnis, damit es hinterher nicht heißt "Hey, so einfach sind globale Hooks":

Der Vorschlag hier hat nichts, aber auch gar nichts mit Hooks zu tun. Registerhotkeys hat auch nichts mit einem Hook zu tun.

Bei Hooks stellt man sich selbst einen Wecker auf die gewünschte Uhrzeit, legt sich schlafen und wacht auf, wenn er klingelt.
Bei RegisterHotkeys sagt man seiner Mutter bescheid, wann sie einen aufwecken soll.
Und der Vorschlag hier beruht darauf, dass man alle 10 Sekunden auf die Uhr schaut, anstatt zu schlafen.


Martok - Mo 11.09.06 10:06

Guter Vergleich!

Nur - manche Wecker lassen sich sehr kompliziert bedienen.
OT: Das hab ich mich bei Nemp auch gefragt: warum nimmst du Hooks und sagst nicht Mama bescheid?

@Topic: aber wenn er sowieso einen Timer nimmt, dachte ich mal Polling wäre am einfachsten.

Martok