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 Problem beim senden eines Textes an eine andere Anwendung (https://www.delphipraxis.net/119055-problem-beim-senden-eines-textes-eine-andere-anwendung.html)

hugo1990 20. Aug 2008 10:23


Problem beim senden eines Textes an eine andere Anwendung
 
Ich möchte an eine andere von mir programmiete Anwendung einen Text senden. Dazu verwende ich folgenden Code:

Senden:
Delphi-Quellcode:
  PostMessage(h, WM_MultiStarted, 0, Integer(PChar(ParamStr(1))));
Empfangen:
Delphi-Quellcode:
procedure TMainForm.MultiStarted(var Msg: tagMSG; var Handled: Boolean);
var Parameter: String;
begin
  if Msg.message = WM_MultiStarted then
    begin
    Parameter := String(PChar(Msg.lParam));
    showmessage(Parameter);
    end;
end;
Nur leider kommen da nur irgendwelche Hieroglyphen raus. Wenn ich aber einen konstanten String angebe, beispielsweise so:
Delphi-Quellcode:
  PostMessage(h, WM_MultiStarted, 0, Integer(PChar('test')));
dann zeigt er mir auch 'test' an.
Was mache ich falsche? Kann mir da jemand weiter helfen?

Bernhard Geyer 20. Aug 2008 10:26

Re: Problem beim senden eines Textes an eine andere Anwendun
 
Du solltest für sowas WM_COPYDATA verwenden.

hugo1990 20. Aug 2008 10:29

Re: Problem beim senden eines Textes an eine andere Anwendun
 
wenn ich WM_COPYDATA verwende, dann kommt gar nichts mehr an.

Bernhard Geyer 20. Aug 2008 10:32

Re: Problem beim senden eines Textes an eine andere Anwendun
 
Zitat:

Zitat von hugo1990
wenn ich WM_COPYDATA verwende, dann kommt gar nichts mehr an.

Dann verwendest du es nicht richtig. Siehe Codelib-Eintrag

hugo1990 20. Aug 2008 11:04

Re: Problem beim senden eines Textes an eine andere Anwendun
 
Ok danke, jetzt funzt es, ich musste dafür zwar noch ein paar kleine Veränderungen an meinem Programm vornehmen, damit ich das Handle der Form finde und nicht nur das von der Application.

Luckie 20. Aug 2008 11:07

Re: Problem beim senden eines Textes an eine andere Anwendun
 
Zitat:

Zitat von hugo1990
Ich möchte an eine andere von mir programmiete Anwendung einen Text senden. Dazu verwende ich folgenden Code:

Senden:
Delphi-Quellcode:
  PostMessage(h, WM_MultiStarted, 0, Integer(PChar(ParamStr(1))));

Letztendlich ist ein PChar nur ein Zeiger auf ein Zeichenarray im Speicher deines Prozesses. Du verschickst also einen Zeiger. Dies hat aber wenig Sinn, da an dieser Speicheradresse im anderen Prozess natürlich nicht deine Zeichenkette steh. Um aber trotzdem auf einfache Art und Weise mit Hilfe von Nachrichten Daten zwischen Prozessen austauschen zu können musst du die Nachricht WM_COPYDATA verwenden. Windows kopiert dann die Daten in einem Speicherbereich auf den beide Prozesse Zugriff haben. Die Daten können ausgetauscht werden.

Die Aussage, dass WM_COPYDATA bei dir nicht funktioniert ist ohne Quellcode wenig hilfreich. Es ist sehr wahrscheinlich, dass du einen Fehler im Quellcode hast.

hugo1990 21. Aug 2008 20:05

Re: Problem beim senden eines Textes an eine andere Anwendun
 
@ Luckie
Schönen Dank für deine Erklärung. Mir war schon fast klar, dass das Problem mit den Zeigern zusammenhängt, nur versteh ich nicht so wirklich, warum, wenn ich in die Klammern von PChar etwas in Hochkommas geschrieben habe, es funktioniert hat.
Aber wie schon gesagt, es funktioniert jetzt.

Apollonius 21. Aug 2008 20:10

Re: Problem beim senden eines Textes an eine andere Anwendun
 
Das geht, weil der konstante String an einer festen Speicherstelle steht. Wenn die Empfängerapplikation also von der selben Echse wie die Senderapplikation gestartet wurde, liegt dort ebenfalls der String.

hugo1990 21. Aug 2008 20:16

Re: Problem beim senden eines Textes an eine andere Anwendun
 
Danke für die Erklärung, langsam verstehe ich immer mehr, wie das mit den Zeigern funktioniert.


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