AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Hook funktioniert nicht systemweit
Thema durchsuchen
Ansicht
Themen-Optionen

Hook funktioniert nicht systemweit

Ein Thema von Flips · begonnen am 18. Jul 2005 · letzter Beitrag vom 19. Jul 2005
Antwort Antwort
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#1

Hook funktioniert nicht systemweit

  Alt 18. Jul 2005, 11:40
Hallo.

Folgendes:
Ich habe mir mal das Hook Tutorial von Luckie (kein Tutorial, Quelltext) und von Assarbad angeschaut.
Habe mir daraus was zusammen geklebt...

Bin auch fast zufrieden, bis auf das der Hook nur dann aktiv ist, wenn mein Programm den Fokus hat.
Wie kann ich den Hook Systemweit aktivieren?
Hab echt keine Ahnung wie das geht...

Hier Dll Code:
Delphi-Quellcode:
library TastaturHook;

uses
  Windows,
  Messages;

const
 WM_KEYBOARD_HOOK = WM_USER + 52012;
var
 HookHandle: Cardinal = 0;
 WindowHandle: Cardinal = 0;

function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE:exit;
    FALSE:
      begin
     PostMessage(WindowHandle,WM_KEYBOARD_HOOK,WParam,LParam);
      end;
  end;
end;


function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
 var keyhooked: boolean;
begin
  keyhooked := false;
if HookHandle = 0 then
begin
 HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);;
 HookHandle:=1;
end;
  WindowHandle := Hwnd;
  Result := keyhooked;
end;

function UninstallHook: Boolean; stdcall;
var keybh: boolean;
begin
  keybh := UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
  Result := keybh;
  if Result then WindowHandle := 0;
end;

exports
  InstallHook,
  UninstallHook;

begin

end.
MfG
Flips
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Hook funktioniert nicht systemweit

  Alt 19. Jul 2005, 07:26
Hi,

daran wirds nicht wirklich liegen aber:

Zitat von Flips:
Delphi-Quellcode:
function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
 var keyhooked: boolean;
begin
  keyhooked := false;
if HookHandle = 0 then
begin
 HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);;
 HookHandle:=1;
end;
  WindowHandle := Hwnd;
  Result := keyhooked;
end;
ist nicht wirklich schön, da du den Hook nie wieder unhooken kannst!
du setzt dein HookHandle auf 1 statt den Rückgabewert der SetWindowsHookEx zu verwenden!
Machs doch lieber so:

Delphi-Quellcode:
function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
var UnInst:boolean;
begin
  if HookHandle <> 0 then
    UnInst := UninstallHook;
  else
    UnInst := True;
  HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);
  WindowHandle := Hwnd;
  Result := (HookHandle <> 0) and UnInst;
end;
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Hook funktioniert nicht systemweit

  Alt 19. Jul 2005, 07:43
Damit sollte es immer noch nicht funktionieren.
Bei globalen Hooks muss man den Hook-Handle in einer Weise aufheben das alle Hook-DLLs ihn benutzen koennen.
Die Hook-DLL wird naemlich allen laufenden Prozessen zugeschlagen und es ist eine Kopie der DLL.
Das Datensegment mit den globalen Variablen ist fuer jede Kopie der DLL separat.
Daraus folgt das nur genau eine Kopie den Hook-Handle hat. Entsprechend funktioniert meistens CallNextHookEx nicht.

Es gibt mehrere Methoden den Hook-Handle geeignet aufzuheben. Ein Shared Segment ist nur mit MS VC++ leicht moeglich.
Peter Vones hat aber ein Tool geschrieben, das es auch fuer Delphi moeglich macht. Siehe Borland Code Central.
Man kann den Hook-Handle aber auch in ein Memory Mapped File stecken.
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#4

Re: Hook funktioniert nicht systemweit

  Alt 19. Jul 2005, 13:36
Nach langen überlegen is mit das auch eingefallen. Schon praktisch die MMF´s. Müsste man mal bekannter machen...

Thx @ all.

ps: Programm ist jetzt fertig
Philipp F.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:55 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