![]() |
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: |
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. |
Re: globaler HOOK funzt. nur lokal
Hallo
Bei InstallHook gibts du ein FensterHandle mit ... :???: Ist das eventuell das Fenster wo es bei dir funktioniert ... |
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. |
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;... |
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 |
Re: globaler HOOK funzt. nur lokal
Schon dasselbe Windowhandle. Aber NICHT als globale Variable. Sondern eben als MMF.
|
Re: globaler HOOK funzt. nur lokal
Zitat:
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz