AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datentransfer zwischen Programmen

Ein Thema von Tom-Tom · begonnen am 25. Jan 2019 · letzter Beitrag vom 28. Jan 2019
 
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
722 Beiträge
 
Delphi 12 Athens
 
#8

AW: Datentransfer zwischen Programmen

  Alt 26. Jan 2019, 13:02
Wenn Du Daten per Message an eine andere Anwendung übergeben willst ist WM_COPYDATA die einzige generelle Methode, wie schon in einigen der anderen Antworten gesagt. Die Message bekommt von Windows eine Sonderbehandlung um die übermittelten Daten aus dem Addressbereich des Senders in den des Empfängers zu kopieren. Allerdings sollte man diese Message tunlichst nicht per BroadcastMessage an *alle* Fenster verschicken, sondern gezielt an dass Message-Handle des Empfängers.
Ich habe in meinem Archiv einen alten Post zu dem Thema gefunden, der Dir vielleicht den Einstieg erleichtert. Die Frage war damals, wie man für eine Anwendung, von der nur eine Instanz zur Zeit laufen soll, Parameter auf der Kommandozeile von einer 2. Instanz an die erste schickt, bevor die 2. sich beendet.


I take it you want to pass the commandline from a second instance of your program to the already running first instance.

Open the projects DPR file (Project|View source) and add this line immediately after the Begin of the main block:

If Alreadyrunning Then Exit;

Then scroll up and add this function after the Uses clause:

Function AlreadyRunning: Boolean;
Var
wnd: HWND;
S: String;
copydata: TCopyDataStruct;
Begin
wnd:= FindWindow('TMyAppsMainformclass', Nil );
Result := wnd <> 0;
If Result and (ParamCount > 0) Then Begin
S:= ParamStr(1);
With copydata Do Begin
dwData := 0;
cbData := Sizeof(Char)*(Length(S)+1); {Need to transfer terminating #0 as well}
lpData := @S[1];
End;
SendMessage( wnd, WM_COPYDATA, 0, LPARAM( @copydata ));
End;
End;

Note that you need to make sure the main form class for your application has a reasonably unique name, so FindWindow finds the correct window.

The second change needed is made to the main form class itself. It needs a handler for the WM_COPYDATA message.

private
{ Private declarations }
procedure WMCopyData(Var msg: TWMCopyData); message WM_COPYDATA;

Procedure TMyAppsMainformclass.WMCopyData(Var msg: TWMCopyData);
Var
param : String;
Begin
param := PChar(msg.CopyDataStruct^.lpData);
...process param
End;
Peter Below
  Mit Zitat antworten Zitat
 


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 10: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