Also, hallo
DP erstmal,
Ich habe einen kleinen Kampf mit einem Hook, den ich mir seit gestern angeschaut habe - und dessen Source ich auch so weit verstanden habe. Angelehnt ist das Ding an ein Tutorial von assarbad.net. Hier isset:
Meine "KeyboardHook.dll":
Delphi-Quellcode:
library KeyboardHook;
uses
SysUtils,
Windows,
Messages;
var
HookHandle: Cardinal = 0;
WindowHandle: Cardinal = 0;
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
LRESULT;
stdcall;
begin
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
case nCode < 0
of
TRUE: exit;
//wenn code kleiner 0 wird nix gemacht
FALSE:
begin
BringWindowToTop(WindowHandle);
if(lParam>0)
then SendMessage(WindowHandle, WM_KEYDOWN, wParam+1, 0)
else SendMessage(WindowHandle, WM_KEYUP, wParam+1, 0);
//Hier kann jetzt alles bearbeitet werden
//Here one can work with the parameters
end;
end;
end;
function InstallHook(Hwnd: THandle): Boolean;
stdcall;
begin
Result := False;
if HookHandle = 0
then begin
//Erstmal Hook installieren
//First install the hook
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);
//Uebergebenes Fensterhandle sichern
//Save the given window handle
WindowHandle := Hwnd;
Result := TRUE;
end;
end;
function UninstallHook: Boolean;
stdcall;
begin
//Hook aus der Hookchain entfernen
//Uninstall hook from hook chain
Result := UnhookWindowsHookEx(HookHandle);
HookHandle := 0;
end;
exports
//Installations- und Deinstallationsroutine exportieren
//Export the installation and deinstallation routine
InstallHook,
UninstallHook;
end.
Und meine Routine im Hauptformular:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
ListBox1.Items.Add(inttostr(Key));
Caption:=inttostr(Key);
end;
Dann erstmal folgendes vorweg: Überraschenderweise hat alles so weit funktioniert, nachdem ich mir das so weit zurechtgeschnippselt hatte.
In meiner Euphorie bin ich zu meinem Firefox gegangen und hab ihm einige Tastenanschläge verpasst. Davon hat mein Programm aber offensichtlich gar nichts mitbekommen
Nun will ich allerdings meinem Prog auch die Tastendrücke nicht vorenthalten, die in anderen Programmen gemacht wurden. Also will dem HP von überall her sagen, dass Taste(n) gedrückt wurden (oder was ich sonst irgendwann mal brauche, ich find das Thema halt erstmal toll^^)
Kennt sich wer besser damit aus als ich?
Leitfragen also:
Warum kommen meine Messages nicht an? Werden die überhaupt gesendet?
Muss ich mich da tiefer in
IPC einarbeiten? Ich dachte, Messages an ein (Fenster-)
Handle zu senden, würde immer funktionieren!?
(Wenn ja, wäre das nicht schlimm, mich weiter zu informieren, bin grade nur etwas ratlos, nich faul
)
Grüße vom LDer