Hallo,
Wollte meinem Programm aus einem fremden Prozess (Hook-
DLL) eine Nachricht senden.
Dummerweise kommt bei meinem Hauptprogramm aber nichts an. Kann mir nicht erklären wieso.
Gemeinsam genutzte
Unit (
DLL & EXE):
Delphi-Quellcode:
var
WM_HOOKPASTE: Integer;
initialization
WM_HOOKPASTE := RegisterWindowMessage('MultiPaste\WM_HOOKPASTE');
DLL:
Delphi-Quellcode:
// In IPCRec.ClipboardHandle steht das Handle was das Hauptprogramm mir per IPC (MMF) übermittelt hat
// Das habe ich nachgeprüft und das ist korrekt.
SendMessage(IPCRec.ClipboardHandle,WM_HOOKPASTE,0,0);
Programm:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var IPCRec: TIPCRec;
begin
FClipBrdEvents := TClipboardEvents.Create;
FClipBrdEvents.OnPaste := PasteEvent;
FMapping := CreateFileMapping(INVALID_HANDLE_VALUE,nil,PAGE_READWRITE,0,SizeOf(TMMFRec),'#MC_FileMappingObj#');
IPCRec := MapViewOfFile(FMapping,FILE_MAP_WRITE,0,0,SizeOf(TIPCRec));
try
IPCRec^.ClipboardHandle := FClipBrdEvents.Handle;
finally
UnmapViewOfFile(HookPtr);
end;
end;
procedure TClipboardEvents.Create;
begin
FHandle := AllocateHwnd(MsgProc);
end;
procedure TClipboardEvents.MsgProc(var Msg: TMessage);
begin
if Msg.Msg = WM_HOOKPASTE then
begin
if Assigned(FOnPaste) then
FOnPaste(Self);
end
else
DefWindowProc(FHandle,Msg.Msg,Msg.WParam,Msg.LParam);
end;
Verstehe leider nicht warum da nichts ankommt. Habs auf nem WinXP Rechner getestet.
Hab auch schonmal an HWND_BROADCAST versendet und versucht die Message im Application.OnMessage abzufangen. Aber da kam leider auch nichts an
Kann mir da vllt. jemand helfen?
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."