Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anwendung einmal starten und dem die Parameter geben (https://www.delphipraxis.net/80732-anwendung-einmal-starten-und-dem-die-parameter-geben.html)

xZise 14. Nov 2006 14:51


Anwendung einmal starten und dem die Parameter geben
 
Schwierig gestellt, aber di Zeile ist zu kurz ;)

Egal :D
Ich möchte ein Programm nur einmal starten (da gabs was mit Mutex), aber das besondere ist, dass alle nachfolgenden Dateien, die mit dem Programm gelinkt wurden, mit dem geöffneten Programm gestartet werden. Ich hoffe es ist verständlich :D

Hier nochmal der Ablauf:
  1. Programm startet
  2. Im Explorer (o. ä.) nur nicht im geöffneten Programm wird eine Datei geladen
  3. Diese Datei würde einen weiteren start des 1. Programms verursachen, aber das soll unterbunden werden. Und die Parameter sollen an das geöffnete Programm weitergegeben werden.

Luckie 14. Nov 2006 15:08

Re: Anwendung einmal starten und dem die Parameter geben
 
Diese Frage hatten wir schon mehr als ein dutzend mal. Einfach vor dem Posten mal die Suche bitte benutzen. :?

http://www.michael-puff.de/dirindex..../Importe/Nico/ -> oneinst.zip

xZise 14. Nov 2006 15:28

Re: Anwendung einmal starten und dem die Parameter geben
 
Hmmm, also aufjedenfall startet es nur einmal, aber ich komme nicht an die Parameter ran...

Delphi-Quellcode:
procedure TfrmQuinstall.DefaultHandler(var Message);
begin
  if TMessage(Message).Msg = SecondInstMsgId then begin
    PostThreadMessage(TMessage(Message).WParam, SecondInstMsgId, Handle, 0);
    BringToFront;
  end else
    inherited;
end;

procedure TfrmQuinstall.ProcessCommandline(lpData: Pointer);
begin
  Memo1.Text := Memo1.Text + ' {[]}';
end;

procedure TfrmQuinstall.FormShow(Sender: TObject);
var
  lpData: Pointer;
  cbData: DWORD;
begin
  lpData := ParamStrToBlob(cbData);
  try
    ProcessCommandline(lpData);
  finally
    FreeMemory(lpData);
  end;
end;
Es ruft nur einmal ProcessCommandline auf...

DevilsCamp 14. Nov 2006 15:41

Re: Anwendung einmal starten und dem die Parameter geben
 
Suche nach dem Handle des Hauptfensters des ersten Prozesses.
Erstelle im zweiten Prozess mit Hilfe von CreateFileMapping einen Speicherbereich, auf dem beide Prozesse zugreifen können, und schreibe da deine Parameter rein (z.B. als Array).
Schicke dem ersten Prozess eine Nachricht (WM_NEUEPARAMETER z.B.) mit SendMessage und übergebe in LParam oder wParam das Handle, das du durch CreateFileMapping bekommen hast. Verarbeite die Parameter im ersten Prozess, schliesse anschliessend im zweiten Prozess das Handle wieder und beende den zweiten Prozess.


So jedenfalls macht es eine Komponente (RunOnce) von Collin Wilson. Funktioniert sehr zuverlässig

xZise 14. Nov 2006 15:47

Re: Anwendung einmal starten und dem die Parameter geben
 
Kann es sein, dass es Luckies Code schon so macht?

SirThornberry 14. Nov 2006 15:51

Re: Anwendung einmal starten und dem die Parameter geben
 
nach kurzem überfliegen sieht luckies variante so aus als würde er ausschließlich über Messages kommunizieren

xZise 14. Nov 2006 15:57

Re: Anwendung einmal starten und dem die Parameter geben
 
Sry, aber mit Messages kenne ich mich noch nicht ganz so gut aus...

[edit]
Zitat:

Zitat von DevilsCamp
So jedenfalls macht es eine Komponente (RunOnce) von Collin Wilson. Funktioniert sehr zuverlässig

Wo kriege ich die her? Google liefert mir immer etwas mit der Registry[/edit]

DevilsCamp 14. Nov 2006 19:23

Re: Anwendung einmal starten und dem die Parameter geben
 
HIER

Du brauchst die "Miscellaneous Components"

Assikopf 15. Nov 2006 02:01

Re: Anwendung einmal starten und dem die Parameter geben
 
Gibt es ne einfache Möglichkeit bei dem Code von Luckie es so einzurichten, dass die alte Instanz fokusiert wird sobald man versucht ein zweite Instanz zu öffnen?
Form1.setfocus quittiert er damit dass er ein deaktiviertes fenster nicht fokusieren kann.

_frank_ 15. Nov 2006 02:29

Re: Anwendung einmal starten und dem die Parameter geben
 
schau mal da, wenns nur ums fokussieren geht:
http://www.fw-web.de/download.php?fi...leinstance.zip

HTH Frank


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