![]() |
Keyboard Hook Key auslesen
Guten Abend zusammen,
und zwar beschäftige ich mich zur Zeit mit Hooks. Ich weiß, dass das ein brisantes Thema ist, aber dennoch möchte ich ein wenig mehr darüber erfahren. Und zwar habe ich mir dazu ein Tutorial von eurer "Rivalen"-Seite Delphi-Treff angesehen. Link: ![]() Ich habe mich an das gehalten, was dort geschrieben steht, nur was mir nicht einleuchtet ist, wie ich den exakten Key abfangen kann. Ich habe es zwar geschaft, dass ich eine Ausgabe bekomme, wenn eine Taste gedrückt wird, aber nicht genau welche. Vielleicht hättet ihr die Güte, mich da ein wenig mehr drüber aufzuklären. Achso, mich würde auch noch interessieren, was die Funktion "InstallHook" für einen Parameter erwartet. Ich übergebe hier eine 0, was bei einem Fensterhandle ja das eigene Fester bedeuten würde. Über eine Antwort würde ich mich freuen. |
AW: Keyboard Hook Key auslesen
Mit dem Parameter merkt er sich ein Fensterhandle. Wird allerdings gar nicht benutzt. In der Hook-Prozedur bekommst Du im WPARAM einen Tastencode und in LPARAM Flags. Siehe
![]() |
AW: Keyboard Hook Key auslesen
Ahhhh ok, erst einmal danke dafür.
Aber wenn ich das richtig sehe, bekomme ich also von "wParam" eine Hex Code. Doch Delphi zeigt mir an, das es sich bei "wParam" um einen "NativeInt" handelt. Jetzt frage ich mich natürlich, wie das zusammen past. Oder gibt es noch eine API Funktion, die mir unbekannt ist, womit ich aus den beiden Parametern was für mich brauchbares bekomme? |
AW: Keyboard Hook Key auslesen
Hier mal ein Beispiel aus der Praxis:
Delphi-Quellcode:
function KeyboardHookProc(Code: Integer; WordParam: WParam; LongParam: LParam): LongInt; stdcall;
begin if (Screen.ActiveControl is TcxGridSite) and (WordParam in [VK_DOWN, VK_UP, VK_LEFT, VK_RIGHT]) then begin if ((LongParam and (1 shl 31)) = 0) then // Bit 31 in LParam zeigt 0:Pressed 1:Released Screen.ActiveControl.Perform(WM_KEYDOWN, WordParam, LOngParam); exit; end; Result := CallNextHookEx(KBHook, Code, WordParam, LongParam); end; |
AW: Keyboard Hook Key auslesen
Zitat:
![]() |
AW: Keyboard Hook Key auslesen
Man bekommt nie niemals nicht (international never ever) einen Hexcode innerhalb eines Computersystems geliefert.
Streng genommen bekommt man nur 0 und 1 geliefert (also Binärcode), aber den immer (PCs) Byteweise (8Bit). Ja, anzeigen lassen kann man sich diese Bytes in Hex, Binär, Octal, Dezimal oder auch einem anderen Zahlensystem der freien Wahl. Aber halt nur Anzeige, und das ist immer eine Interpretation der Daten. 100x an die Tafel schreiben und bis Montag auswendig lernen :mrgreen: |
AW: Keyboard Hook Key auslesen
[OT]
Zitat:
[/OT] |
AW: Keyboard Hook Key auslesen
Zitat:
Ok, aber wenn ich das jetzt richtig verstehe, erwarte ich von "CallNextHookEx()" eine Zahlenkette (LRESULT). Mit dieser sollte ich doch dann prüfen können, welche Taste gedrück wurde, indem ich z.B. prüfe, ob Decimal(Result) von CallNextHookEx = 97 (a) ist oder? |
AW: Keyboard Hook Key auslesen
Wir sind hier nicht bei C++ wo ein L Präfix einen Unicode String kennzeichnet ;) Es handelt sich bei LParam um einen 32-bit Integer. Siehe auch mein Beispiel.
|
AW: Keyboard Hook Key auslesen
Ich muss zugeben, das ich einen dummen Fehler gemacht habe ^^
Delphi-Quellcode:
Hier kommt natürlich nichts bei raus.
messagebox(0, PChar(Hier ein Integer), 'Title');
Als ich Testhaber aber folgendes gemacht habe, funktionierte es natürlich:
Delphi-Quellcode:
messagebox(0, PChar(IntToStr(Hier ein Integer)), 'Title');
Ich bedanke mich für die super Hilfe. Ichs habs verstanden und es funktioniert ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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