Einzelnen Beitrag anzeigen

Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#1

"Da ist ein Haken an meinem Haken" (warum spinnt m

  Alt 3. Sep 2009, 18:52
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
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat