Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Keyboard Hook Key auslesen (https://www.delphipraxis.net/175642-keyboard-hook-key-auslesen.html)

SyntaxXx 5. Jul 2013 19:55

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: Klick mich


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.

Union 5. Jul 2013 20:32

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 hier.

SyntaxXx 5. Jul 2013 21:15

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?

Union 5. Jul 2013 21:33

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;

Aphton 5. Jul 2013 22:21

AW: Keyboard Hook Key auslesen
 
Zitat:

Zitat von SyntaxXx (Beitrag 1220874)
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.

Wat?

Sir Rufo 5. Jul 2013 23:05

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:

Aphton 5. Jul 2013 23:23

AW: Keyboard Hook Key auslesen
 
[OT]
Zitat:

Zitat von Sir Rufo (Beitrag 1220883)
nie niemals nicht

Klasse ^^
[/OT]

SyntaxXx 6. Jul 2013 14:25

AW: Keyboard Hook Key auslesen
 
Zitat:

100x an die Tafel schreiben und bis Montag auswendig lernen
Wurde gemacht und unlöschbar gesichert ^^.

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?

Union 7. Jul 2013 23:15

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.

SyntaxXx 10. Jul 2013 21:21

AW: Keyboard Hook Key auslesen
 
Ich muss zugeben, das ich einen dummen Fehler gemacht habe ^^

Delphi-Quellcode:
messagebox(0, PChar(Hier ein Integer), 'Title');
Hier kommt natürlich nichts bei raus.
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 03:50 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