![]() |
Tastendrücke systemweit abfangen
Hi,
wie kann ich bei einem Programm Tastendrücke wie "A" oder "2" abfangen, auch wenn ich nicht grad am Programm arbeite, dass dann zum Beispiel eine Nachricht kommt?? Also if key=a then showmessage oder so aber halt systemweit. :gruebel: |
Re: Tastendrücke systemweit abfangen
![]() |
Re: Tastendrücke systemweit abfangen
ok das hat ja geklappt damit:
Code:
Aber wenn ich jetzt zum Beispiel ein "A" in eine Textdatei schreiben will währen das Programm läuft dann macht er nix! is der key solange deaktiviert solange das Programm läuft und wie kann ich das verhindern, dass man trotzdem noch was schreiben kann?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; { Private declarations } public { Public declarations } end; const ID_a= ord('A'); var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMHotKey(var Msg : TWMHotKey); begin if Msg.HotKey = ord('A') then begin showmessage('A'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Form1.Handle, ID_a, 0, ord('A')); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Form1.Handle, ord('A')); end; end. |
Re: Tastendrücke systemweit abfangen
So wie es aussieht wirst du um hooks nicht herumkommen denn RegisterHotkey verwirft den Hotkey so das dieser nie in der anderen Anwendung ankommt
|
Re: Tastendrücke systemweit abfangen
könntest du da mal ein Beispiel zeigen wie das geht plz? :P
|
Re: Tastendrücke systemweit abfangen
Assarbad hat da mal ein gutes tutorial geschrieben ... such einfach mal danach hier im forum
ciao, Philipp |
Re: Tastendrücke systemweit abfangen
Also ich muss sagen, dass mich solche Programme immer etwas unruhig machen, die alle Tastenaktivitäten aufzeichnen bzw. registrieren.
Denn nehmen wir mal an ich bin in meinem Online-Banking oder logge mich bei Ebay (oder sonst wo) ein. Dann wäre es ein leichtes, mein Passwort bzw. meine Daten an eine e-Mail Adresse oder ähnliches zu schicken. Das aber nur mal am Rande ;) Gruß Thomas |
Re: Tastendrücke systemweit abfangen
irgendwie seh ich bei dem Tutorial nicht durch kann mir jemand mal den Code schreiben, wie ich eben Tastaturdrücke außerhalb des Fensters erkennen und reagieren kann aber halt trotzdem noch weiterarbeiten kann im Hintergrund z.B in Word oder so.
|
Re: Tastendrücke systemweit abfangen
ka was du jetzt wirklich brauchst, villeicht sind auch
![]() |
Re: Tastendrücke systemweit abfangen
Ich hab mir den Quellcode von dem keylogger mal angeguckt hat aber nix gebracht da ich da nicht durchsehe, da dort nichtmal eine Form1 oder so existiert oder irgendwas on create oder sonstwas ich brauch nen einfachen Code, der meinetwegen alles was ich drücke in einem label schreibt während es im Hintergrund läuft zum Beispiel. geht das denn nicht einfacher?
|
Re: Tastendrücke systemweit abfangen
Ein Hook ist grundsätzlich eine DLL, und die hat eben normalerweise kein Fenster, da kann man nix machen.
Aber du könntest auch über RegisterHotKey dir nen HotKey registrieren, und wenn dieser dann aktiviert wird, deaktivierst du ihn kurz, simulierst den Tastendruck, den der HotKey abgefangen hat, und aktivierst den HotKey wieder. Das wäre eine möglichkeit einen Hook zu umgehen. Eine weitere (aber sehr schlechte) Methode den Hook zu umgehen wäre eine GetAsyncKeyState funktion in verbindung mit einem Timer immerwieder aufzurufen, und checken ob ne Taste gedrückt wurde. Das funktioniert nicht immer so toll, aber es funktioniert, und die eigentliche Anwendung empfängt den Tastendruck immernoch. ciao, Philipp |
Re: Tastendrücke systemweit abfangen
Ok das hat geklappt :roll: aber er nimmt nur alle Buchstaben und Zahlen an aber keine Punkte oder andere Sonderzeichen:
Code:
Buchstaben und Zahlen klappen hingegen. Woran liegt das denn?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; { Private declarations } public { Public declarations } end; const ID_pnt= ord('.'); const ID_min= ord('-'); var Form1: TForm1; ini:Tinifile; implementation {$R *.dfm} procedure TForm1.WMHotKey(var Msg : TWMHotKey); begin if Msg.HotKey = ord('.') then //<-- solche Sachen macht er nicht showmessage('.'); if Msg.HotKey = ord('-') then showmessage('-'); end; procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Form1.Handle, ID_pnt, 0, ord('.')); RegisterHotKey(Form1.Handle, ID_min, 0, ord('-')); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Form1.Handle, ord('.')); UnRegisterHotKey(Form1.Handle, ord('-')); end; end. |
Re: Tastendrücke systemweit abfangen
Das liegt wohl daran, dass sonderzeichen meist aus tastenkombinationen bestehen ...
Die JVCL-Komponente JvAppHotKey macht das ganz nett ... habs noch nicht wirklich getestet, aber sie nimmt auch - oder . an ... (schaus dir mal an ^^) Aber wenn du einfach nur alle Tastendrücke loggen willst (wie mir das hier scheint), dann lege ich dir Hooks nahe, da du dann nicht 104 (oder mehr) Hotkeys registrieren musst ... ciao, Philipp |
Re: Tastendrücke systemweit abfangen
und übrigens: bei luckies keylogger ist ne lange diskussion hinten am thread dran, die sollte so einiges klären :roll:
|
Re: Tastendrücke systemweit abfangen
gibt es eine möglichkeit, bei den hotkeys nach Delphi-Noobie's art zwischen keydown und keyup zu unterscheiden?
damit z.b. beim drücken einer taste die medienplayer-komponente einen sound spielt und beim loslassen der taste der player wieder stoppt? gruß, thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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