Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei per Doppelklick dem bereits geöffneten Programm übergeben (https://www.delphipraxis.net/191314-datei-per-doppelklick-dem-bereits-geoeffneten-programm-uebergeben.html)

Mikkey 2. Jan 2017 18:57

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Zitat:

Zitat von DeddyH (Beitrag 1357806)
Von "erforderlich" kann ich im MSDN aber nirgends etwas lesen. Vielmehr verstehe ich das so, dass man hier optional das Fensterhandle des Senders hinterlegen kann. Ich würde es einfach mal mit einer 0 probieren, sollte das nicht klappen, mit HWND_MESSAGE oder so.

Schon gemacht? Dann nehme ich alles zurück. Die Methode per GlobalAlloc ist etliche Male in der Praxis erprobt. Nennenswert mehr Code ist damit auch nicht verbunden.

a.def 2. Jan 2017 19:45

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Ich benutze für dieses Problem auch WM_COPYDATA.

Situation

- Programm "A" ist gestartet
-- in der DPR-Datei wird geprüft, ob es schon eine aktive Instanz gibt. Hier nein, also Programm ausführen
- erneut Doppelklick auf Programm "A" ruft Programm "A" erneut auf.
-- in der DPR-Datei wird wieder auf eine aktive Instanz geprüft. Hier gibt es nun eine, also sende Daten mit WM_COPYDATA und führe die zweite Instanz von "A" nicht weiter => also beenden.
- die erste aktive Instanz von "A" wertet nun die von der zweiten Instanz "A" übergebenen Daten aus.

Luckie 2. Jan 2017 20:19

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Hier im Forum gibt es schon genug Beispiele für dieses Problem mit WM_COPYDATA. Es scheint also zu funktionieren.

HolgerX 2. Jan 2017 20:51

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Hmm..

Sowas ähnliches hab ich mal gemacht, jedoch nicht um einen String zu übergeben, sondern, um die bereits laufende Applikation nach Vorne zu holen.

Beim Start verwende ich

Delphi-Quellcode:
  {Register a custom windows message}
  FAppMyMsg := RegisterWindowMessage(FAppProgName);
Wenn der Mutex dann bereits vorhanden ist, wird

Delphi-Quellcode:
SendMessage(HWND_BROADCAST,RegisterWindowMessage(FAppProgName),0,0);
Aufgerufen.

Da die WindowsMessage nur von selben Programm gekannt wird, reagiert auch nur dieses darauf.

himitsu 3. Jan 2017 01:18

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Zitat:

Zitat von Luckie (Beitrag 1357829)
Hier im Forum gibt es schon genug Beispiele für dieses Problem mit WM_COPYDATA. Es scheint also zu funktionieren.

Eventuell muß man auch noch ChangeWindowMessageFilterEx verwenden, aber wird bei vielen prozessübergreifenden Messages im MSDN sowieso immer mit erwähnt.

Luckie 3. Jan 2017 01:23

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Das habe ich noch nie hier im Forum gesehen. Muss also auch ohne gehen. :wink:

himitsu 3. Jan 2017 01:30

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Meistens gibt es das Problem nur bei evaluierten Anwendungen.

NichtAdminAnwendung zu AdminAnwendung
AnwendungInUserContextA zu AnwendungInUserContextB

Aber schaden kann es auch nicht. :angle:

Luckie 3. Jan 2017 01:38

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
Hä? Von NormalUser zu Admin? Jetzt wird es strange. User zu User. OK. Kein Problem. Aber User zu Adim? Das sollte Windows zu verhindern wissen. Zumindest ohne Passworteingabe.

Friday 3. Jan 2017 10:37

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
danke für die vielen Vorschläge.
Mit WM_COPYData funktioniert es an sich schonmal.

Macht ihr das für den Fall in dem ihr den kompletten CmdLine der ersten nstanz übergibt oder einzelne Messages für jeden ParamStr?
Ich frage deshalb weil ich mir nicht sicher bin ob es sinnvoll / unproblematisch ist mehrere SendMessages aufzurufen (den Benutzer kann ja nichts davon abhalten eine zweite Instanz mit 10'000 Dateien als Parameter aufzurufen).
Bei CmdLine müsste der eigene Code die einzelnen Parameter aussortieren (Leerzeichenbehandlung, mal Anführungszeichen, mal nicht etc.)

himitsu 3. Jan 2017 12:10

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben
 
MSDN-Library durchsuchenGetCommandLine
Aber leider ist Borland/Embarcadero so nett und stellt den Code zum Parsen nicht öffentlich bereit, womit du das dann selber zerlegen musst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 Uhr.
Seite 2 von 3     12 3      

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