AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi "Da ist ein Haken an meinem Haken" (warum spinnt mein Hook?)
Thema durchsuchen
Ansicht
Themen-Optionen

"Da ist ein Haken an meinem Haken" (warum spinnt mein Hook?)

Offene Frage von "LDericher"
Ein Thema von LDericher · begonnen am 3. Sep 2009 · letzter Beitrag vom 3. Sep 2009
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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