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 WM_COPYDATA von DLL zu Programm im Hintergrund / Handle? (https://www.delphipraxis.net/35406-wm_copydata-von-dll-zu-programm-im-hintergrund-handle.html)

StefanDP 6. Dez 2004 19:17


WM_COPYDATA von DLL zu Programm im Hintergrund / Handle?
 
Hi
Ich habe eine DLL in der ich mit folgender Funktion etwas an ein Programm schick.
Delphi-Quellcode:
      SendMessage(WindowHandle, WM_COPYDATA, AHandle, Integer(@cds));
das funktioniert auch, solang das programm im vordergrund ist.
ist es jedoch im hintergrund funktioniert es nichtmehr.

wenn ich jetzt aber statt dem ziehlhandle (statt WindowHandle) ein HWND_BROADCAST reinmach, funktioniert es wieder, jedoch ist dann die vordergrund-anwendung nicht mehr aktiv

was is da falsch?

shmia 7. Dez 2004 10:09

Re: WM_COPYDATA von DLL zu Programm im Hintergrund / Handle?
 
Bei WM_COPYDATA ist zu beachten, dass du die übergebenen Daten sofort bei Erhalt der Message in ein anderen Speicher kopierst.

Die MSDN sagt dazu:
The receiving application should consider the data read-only. The lParam parameter is valid only during the processing of the message. The receiving application should not free the memory referenced by lParam. If the receiving application must access the data after SendMessage returns, it must copy the data into a local buffer.
Du solltest zusätzlich auch noch den Returnwert von SendMessage auswerten:
Delphi-Quellcode:
if not SendMessage(WindowHandle, WM_COPYDATA, AHandle, Integer(@cds)) then
begin
   OutputDebugString('WM_COPYDATA failed!');
end;
Dazu muss auch deine Anwendung bei Erhalt der Message den Resultwert setzen.
Delphi-Quellcode:
procedure TForm1.WMCopydata(var Message: TWMCopyData);
begin
   // Daten auswerten/kopieren
   Message.Result := 1; // erhalt bestätigen
end;

Vjay 7. Dez 2004 12:45

Re: WM_COPYDATA von DLL zu Programm im Hintergrund / Handle?
 
Woher bekommst du denn das Windowhandle? Per FindWindow? Hast du das Fenster evtl. mehrmals auf dem Schirm (Delphi Designer ;) ) ?


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