![]() |
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:
|
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. :?
![]() |
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:
Es ruft nur einmal ProcessCommandline auf...
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; |
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 |
Re: Anwendung einmal starten und dem die Parameter geben
Kann es sein, dass es Luckies Code schon so macht?
|
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
|
Re: Anwendung einmal starten und dem die Parameter geben
Sry, aber mit Messages kenne ich mich noch nicht ganz so gut aus...
[edit] Zitat:
|
Re: Anwendung einmal starten und dem die Parameter geben
|
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. |
Re: Anwendung einmal starten und dem die Parameter geben
schau mal da, wenns nur ums fokussieren geht:
![]() 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