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 daten zw dll und programm via sendmessage verschicken (https://www.delphipraxis.net/9251-daten-zw-dll-und-programm-via-sendmessage-verschicken.html)

gabitzi 21. Sep 2003 22:08


daten zw dll und programm via sendmessage verschicken
 
hy!

ich versuche daten(genauer gesagt einen handle oder string) zu verschicken. Ich habe es wie in enem der beispiele hier im Forum mit hilfe von WM_COPYDATA versucht, aber ich kriege immer wieder Acces Violation. Dabei ist was ich verschicken will schon Teil meiner Shared Memeory. Ich schaffe es nicht einmal eine einfache zahl zu senden. was tue ich falsch??
kann es daran liegen das mein sendmessage nach einem anderen postmessage aufgerufen wird??

danke
gabitzi

Chewie 21. Sep 2003 23:19

Re: daten zw dll und programm via sendmessage verschicken
 
Wenn du hier im Forum suchst, dürftest du einige Beispiele finden. Wenn du diese nicht auf dein Programm übertragen kannst, dann poste am besten mal etwas Code.

Robert Marquardt 22. Sep 2003 06:25

Re: daten zw dll und programm via sendmessage verschicken
 
Es ist Unsinn mit einer in eigene Programm geladenen DLL per Message zu kommunizieren.
Wie waere es dennn mit einer simplen Funktion, die einen Puffer und eine Pufferlaenge uebergibt?
Alle Win32-Funktionen arbeiten auf diese Weise.

Motzi 22. Sep 2003 08:13

Re: daten zw dll und programm via sendmessage verschicken
 
@Robert Marquardt: die Dll muss ja nicht zwangsläufig im eigenen Programm geladen sein, es kann sich durchaus auch um eine Hook-Dll handeln die in einem fremden Prozessraum liegt...

@gabitzi: aber ohne Code und weitere Informationen wird das höchstens ein Ratespielchen... :?

Robert Marquardt 22. Sep 2003 08:36

Re: daten zw dll und programm via sendmessage verschicken
 
Eine Hook-Dll ist in ALLE Programme geladen.
Poste doch mal den WM_COPYDATA-Code der DLL.

Motzi 22. Sep 2003 08:52

Re: daten zw dll und programm via sendmessage verschicken
 
Zitat:

Zitat von Robert Marquardt
Eine Hook-Dll ist in ALLE Programme geladen.

Auch nicht zwangsläufig..! ;)

Delphi-Quellcode:
HHOOK SetWindowsHookEx(          int idHook,
    HOOKPROC lpfn,
    HINSTANCE hMod,
    DWORD dwThreadId
);
Zitat:

Zitat von MSDN
dwThreadId
[in] Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.

Dadurch kann man eine Dll gezielt in einen bestimmten Prozessraum injizieren... (hängt aber auch davon ab welche Art von Hook verwendet wird...)

gabitzi 22. Sep 2003 18:25

Re: daten zw dll und programm via sendmessage verschicken
 
hallo

inzwischen schaffe ich es die daten (das heisst, den handle zu verschicken) aber leider nicht richtig. Es handelt sich tatsachlich um eine hook dll, und ich versuche den handle des activen(egtforeground window) zu verschicken. Im programm zeige ich dann woher es kam. ich bekomme den richtigen handle aber nur wenn ich in meinem eigen Fenster binn. Ansonsten scheinen die zahlen nicht zu stimmen.

dll procedure

function KbdHook(hCode,wParam:LongInt;lParam:LongInt):Longi nt;stdcall;
var
wc:PChar;
Hw:HWND;
CDS: TCopyDataStruct;

begin

if (MyData^.Msg<>0) and (hCode=HC_ACTION) then
begin
PostMessage(MyData^.Handle,MyData^.Msg,wParam,lPar am);
hw:= GetForegroundWindow();
MyData^.st:=hw;
;
with CDS do
begin
dwData := 0;
cbData := SizeOf(integer);
lpData := Pointer(MyData^.st);
end;

SendMessage(MyData^.Handle, WM_COPYDATA, 0, LongInt(@CDS));
end;



if (MyData^.hHook <> 0) then begin

Result:=CallNextHookEx(MyData^.hHook,hCode,wParam, lParam)
end else Result:=0

end;


main program:
procedure TfrmHook.WndMsg(var msg: TWMCopyData);
var
copyData:PCopyDataStruct;
y:HWND;
x:integer;
writeData:PAnsiChar;
begin




copyData:=msg.CopyDataStruct;
x:= Integer(copyData.lpData);
y:=hwnd(x);
showmessage('übergebene Zahl:' + #13 + IntToStr(x));
GetWindowText(y,writedata,254);

showmessage('window' + #13 + string(writedata));

end;

irgendetwas gehe ich bestimmt falsch an ..danke
gabi

gabitzi 25. Sep 2003 16:28

Re: daten zw dll und programm via sendmessage verschicken
 
hy ...
hab von euch leider keine Antwort mehr gekriegt, und nach langerem Uberlegen kam ich zur Schlussfolgerung, dass ich so nie das richtige Handle ubertragen werde, weil ich schon von Anganf an nicht richtig durch mein KetboardHook empfange. Ich dachte noch ein Shellhook dafur hinzuzufugen. Ware das gut so? Ich probiers mal ...

viele gruesse :D
gabitzi

Luckie 25. Sep 2003 20:13

Re: daten zw dll und programm via sendmessage verschicken
 
Kuck mal in der OpenSource Sparte, da findest du den keyLogger von mir und Aya. In der DLL habgen wir genau das auch realisiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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-2025 by Thomas Breitkreuz