![]() |
CraeteMutex() + die gesuchte Instanz finden
Hallo allerseits,
ich hoffe ich bin hier richtig mit meinem Post ^^ Ich hab ein Problem mit meinem CreateMutex(). Und zwar möchte ich per Eingabeaufforderung meine Anwendung öffnen. Allerdings soll, wenn bereits eine Instanz meiner Anwendung gestartet wurde, die den selben der Parameter "s_paramFormCaption" hat, keine neue Instanz gestartet werden, sondern nur die neuen Parameter der alten Instanz mit dem Parameter "s_paramFormCaption" übergeben werden. Wenn noch keine Instanz mit dem Übergabeparameter "s_paramFormCaption" besteht, soll eine neue Instanz erzeugt werden. Bislang ist es so, dass ich eine neue Instanz erzeuge, abhängig von dem Parameter "s_paramFormCaption", allerdings, wenn ich mehrere Instanzen habe, und auf eine bestehende zugreifen will, findet er nicht die richtige. Er übergibt die Parameter denn immer zu der zuletzt angezeigten Instanz. Hier mein Source:
Delphi-Quellcode:
Vielleicht weiß ja jemand von euch Rat.
implementation
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMutex = class(TObject) end; var mHandle: THandle; aCopyData: TCopyDataStruct; pCh_wholeDeliveryParam: PChar; s_paramFile,s_paramDest,s_paramFormCaption:string; i_ParamCountLoop:integer; initialization s_paramFormCaption := EmptyStr; s_paramFile := paramstr(1); s_paramDest := ParamStr(2); // Einlesen der Titelzeile Parameter for i_paramCountLoop := 3 to ParamCount do begin if s_paramFormCaption = '' then s_paramFormCaption := ParamStr(i_paramCountLoop) else s_paramFormCaption := s_paramFormCaption + ' ' + ParamStr(i_paramCountLoop); end; // MUTEX erstellen damit später erkennbar ob schon eine Anwendung //gestartet wurde mHandle := CreateMutex(Nil, True, PChar(s_paramFormCaption)); if GetLastError = ERROR_ALREADY_EXISTS then //Die Bedingung trifft zu, wenn die FurtherApp schon existiert. //Dies ist der Fall, wenn das Programm bereits gestartet //wurde. Halt; finalization // wenn bereits eine Anwendung besteht dann Übergabe der eingegebenen Params if mHandle <> 0 then begin // Prüfen ob die eingegebene Datei existiert if (fileexists(s_paramFile)) then pCh_wholeDeliveryParam := pchar(s_paramFile+ ';' +s_paramDest+ ';' + s_paramFormCaption) else // wenn nicht dann "nichts" für die Datei übergeben pCh_wholeDeliveryParam := pchar(''+ ';' +s_paramDest+ ';' + s_paramFormCaption); with aCopyData do begin dwData := 0; cbData := StrLen(pCh_wholeDeliveryParam) + 1; lpData := pCh_wholeDeliveryParam; end; SendMessage(FindWindow('TForm_CallAcro', nil), WM_COPYDATA, Application.Handle, Longint(@aCopyData)); CloseHandle(mHandle); Application.Terminate; end; end. Vielen Dank im voraus!! LG schatzy :-D |
Re: CraeteMutex() + die gesuchte Instanz finden
PS: Hab jetzt auch in DSDT gepostet ;)
LG Schatzy bzw Schlumpfine :-D |
Re: CraeteMutex() + die gesuchte Instanz finden
Hab den Fehler gefunden :!:
Musste bloß in der folgende Zeile etwas ändern:
Delphi-Quellcode:
Eure Antworten waren trotzdem sehr hilfreich.
SendMessage(FindWindow('FORM_NAME', PChar('FORMTITEL')), WM_COPYDATA, mhandle,
Longint(@aCopyData)); Dankeschön LG Schatzy :-D |
Re: CraeteMutex() + die gesuchte Instanz finden
|
Re: CraeteMutex() + die gesuchte Instanz finden
Hey Shaman,
das ja klasse... weitere Lösungsmöglichkeiten interessieren mich immer =) Vielen Dank LG Schatzy :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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