Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi globaler HOOK funzt. nur lokal (https://www.delphipraxis.net/103450-globaler-hook-funzt-nur-lokal.html)

ForestX 15. Nov 2007 21:27


globaler HOOK funzt. nur lokal
 
Ich versuche ein hook quasi global zu machen. Ich habe die Geschichte in ne DLL ausgelagert aber es funktioniert nur wenn mein fenster den focus hatt.
Fände voll coll wenn mir jemand helfen könnte weil ich bin voll am verzweifeln und fühle mich ein wenig verloren.
Ja und dann noch
1.Nein ich will keinen keylogger schreiben :dance: (ein trainer soll es werden)
2.Ja Hab wie ein blöder im Foren gesucht bis ich bekloppt wurde :wall:
3.Ja ich habe Assabards tuto gelesen und gegoogelt wie ein blöder :dance:


so code :
Delphi-Quellcode:
library Project2;



uses
  sharemem,
  windows,
  messages;

//{$R *.res}
var HookHandle :Cardinal = 0;
var 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
sendmessage(WIndowHandle ,WM_USER +23,wparam,lparam);
end;
end;
end;


function InstallHook(Hwnd: Cardinal): boolean; stdcall;
begin
Result := False;
if HookHandle = 0 then begin
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc,Hinstance,0);

windowhandle := Hwnd;
result := True;
end;
end;



function UninstallHook :boolean; stdcall;
begin
result := UnhookwindowsHookEx(HookHandle);
HookHandle := 0;
end;

exports
InstallHook,
UninstallHook,
keyboardHookProc ;


end.



Ich bin so Verzweifelt :dance:

sirius 15. Nov 2007 21:36

Re: globaler HOOK funzt. nur lokal
 
Ich habe schon lange keinen Hook mehr geschrieben, da kommt man immer ein bisschen raus. Aber ich sag mal, was ich versuchen würde:
1. sharemem raus (Du brauchst sie nicht und wenn die DLL in alle Processe gemappt wird, haben die anderen Process womöglich die Sharmem nicht)
2. Postmessage ist besser bei sowas, damit du die Messagequeue nicht anhälst, wenn dein Programm Fehler macht (Aber das dürfte nicht das Problem sein)
3. globale Variable des Windowhandles? Ist da nicht ein MMF o.ä. besser? Ich glaube die Funktion (wenn sie in den anderen Processen ist) hat keinen Zugriff auf globale Variablen.

peschai 16. Nov 2007 05:21

Re: globaler HOOK funzt. nur lokal
 
Hallo
Bei InstallHook gibts du ein FensterHandle mit ... :???:
Ist das eventuell das Fenster wo es bei dir funktioniert ...

SirThornberry 16. Nov 2007 06:50

Re: globaler HOOK funzt. nur lokal
 
der Fehler ist ganz einfach.
Windowhandle ist allen DLL-Instanzen bis auf einer 0.

Du musst dir bewusst sein das durch installieren des Hook, NICHT alle Tasten an die Funktion in deiner geladenen DLl geschickt werden SONDERN die DLL von jedem Prozess geladen wird. Du kannst es dir also in etwa so vorstellen das durch das installieren des Hook alle anderen Prozesse LoadLibrary aufrufen und dann alle Tasten an die Funktion in ihrer geladenen DLL schicken und nicht an die DLL-Instanz welche du geladen hast.

bitsetter 16. Nov 2007 09:10

Re: globaler HOOK funzt. nur lokal
 
Hi,

arbeite doch lieber mit FileMapping. Du brauchst ja nur mal zum Testen eine Showmessage einbauen, dann siehst du was meine Vorredner meinten.
Delphi-Quellcode:
uses

  windows,
  dialogs,
  sysutils,
  messages;

//{$R *.res}
var
  Keyboard_HookHandle: LongWord = 0;
var Windowhandle :cardinal = 0;
function KbdHookProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall;
var
  PID,
    sizewritten,
    hFile: LongWord;
begin
 case nCode < 0 of
    True: exit; // If the code is smaller than 0 nothing _has_ to be done
    False:
      begin
        ShowMessage(inttostr(WIndowHandle));
        //postmessage(WIndowHandle ,WM_USER +23,wparam,lparam);
     end;
  end;
    Result := CallNextHookEx(Keyboard_HookHandle, nCode, wParam, lParam);

end;...

ForestX 16. Nov 2007 10:46

Re: globaler HOOK funzt. nur lokal
 
Ja aber ich schick ja dan Lparam und wparam an mein programm ergo = da dann müste es ja aus der geladenn 'copy ' an mein programm geschickt werden. Und was für ein handle müste ich benuzten wenn ich das ganze nicht nur auf mein fenster beziehen will sondern auf das ganze system.

Fragen über fragen und ich kannn mir keinen reihm drauf machen :wall:

aber ich werde immer weiter dancen :dance: uyaaaa

sirius 16. Nov 2007 10:50

Re: globaler HOOK funzt. nur lokal
 
Schon dasselbe Windowhandle. Aber NICHT als globale Variable. Sondern eben als MMF.

bitsetter 16. Nov 2007 12:24

Re: globaler HOOK funzt. nur lokal
 
Zitat:

Zitat von ForestX
3.Ja ich habe Assabards tuto gelesen...

Sieh dir doch mal die DLL vom Beispiel Captain Hook an, da wird mit MMF gearbeitet. Das Handle des Fensters, befindet sich dort übrigens in der Variablen lpView^.wnd.

Zitat:

Zitat von ForestX
Ja aber ich schick ja dan Lparam und wparam an mein programm ergo = da dann müsste es ja aus der geladenn 'copy ' an mein programm geschickt werden.

Nein, wenn deine Variable WIndowHandle 0 ist, wird auch nichts an dein Fenster gesendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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