AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim senden eines Textes an eine andere Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim senden eines Textes an eine andere Anwendung

Ein Thema von hugo1990 · begonnen am 20. Aug 2008 · letzter Beitrag vom 21. Aug 2008
Antwort Antwort
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem beim senden eines Textes an eine andere Anwendung

  Alt 20. Aug 2008, 11:23
Ich möchte an eine andere von mir programmiete Anwendung einen Text senden. Dazu verwende ich folgenden Code:

Senden:
  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:
  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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 20. Aug 2008, 11:26
Du solltest für sowas WM_COPYDATA verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 20. Aug 2008, 11:29
wenn ich WM_COPYDATA verwende, dann kommt gar nichts mehr an.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 20. Aug 2008, 11:32
Zitat von hugo1990:
wenn ich WM_COPYDATA verwende, dann kommt gar nichts mehr an.
Dann verwendest du es nicht richtig. Siehe Codelib-Eintrag
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 20. Aug 2008, 12:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 20. Aug 2008, 12:07
Zitat von hugo1990:
Ich möchte an eine andere von mir programmiete Anwendung einen Text senden. Dazu verwende ich folgenden Code:

Senden:
  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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 21. Aug 2008, 21:05
@ 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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 21. Aug 2008, 21:10
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Problem beim senden eines Textes an eine andere Anwendun

  Alt 21. Aug 2008, 21:16
Danke für die Erklärung, langsam verstehe ich immer mehr, wie das mit den Zeigern funktioniert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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