AGB  ·  Datenschutz  ·  Impressum  







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

CraeteMutex() + die gesuchte Instanz finden

Ein Thema von Schatzy · begonnen am 12. Sep 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Benutzerbild von Schatzy
Schatzy

Registriert seit: 9. Aug 2006
Ort: Nähe HH
9 Beiträge
 
Delphi 6 Professional
 
#1

CraeteMutex() + die gesuchte Instanz finden

  Alt 12. Sep 2006, 10:36
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:
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.
Vielleicht weiß ja jemand von euch Rat.

Vielen Dank im voraus!!

LG schatzy
Jacqueline
Die drei natürlichen Feinde des Programmierers:
Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel
  Mit Zitat antworten Zitat
Benutzerbild von Schatzy
Schatzy

Registriert seit: 9. Aug 2006
Ort: Nähe HH
9 Beiträge
 
Delphi 6 Professional
 
#2

Re: CraeteMutex() + die gesuchte Instanz finden

  Alt 12. Sep 2006, 10:54
PS: Hab jetzt auch in DSDT gepostet

LG Schatzy bzw Schlumpfine
Jacqueline
Die drei natürlichen Feinde des Programmierers:
Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel
  Mit Zitat antworten Zitat
Benutzerbild von Schatzy
Schatzy

Registriert seit: 9. Aug 2006
Ort: Nähe HH
9 Beiträge
 
Delphi 6 Professional
 
#3

Re: CraeteMutex() + die gesuchte Instanz finden

  Alt 12. Sep 2006, 14:40
Hab den Fehler gefunden

Musste bloß in der folgende Zeile etwas ändern:
Delphi-Quellcode:
SendMessage(FindWindow('FORM_NAME', PChar('FORMTITEL')), WM_COPYDATA, mhandle,
              Longint(@aCopyData));
Eure Antworten waren trotzdem sehr hilfreich.
Dankeschön

LG
Schatzy
Jacqueline
Die drei natürlichen Feinde des Programmierers:
Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: CraeteMutex() + die gesuchte Instanz finden

  Alt 12. Sep 2006, 23:08
Hey there

Das könnte dich interessieren.

Greets
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Schatzy
Schatzy

Registriert seit: 9. Aug 2006
Ort: Nähe HH
9 Beiträge
 
Delphi 6 Professional
 
#5

Re: CraeteMutex() + die gesuchte Instanz finden

  Alt 13. Sep 2006, 07:31
Hey Shaman,

das ja klasse... weitere Lösungsmöglichkeiten interessieren mich immer =)
Vielen Dank

LG Schatzy
Jacqueline
Die drei natürlichen Feinde des Programmierers:
Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:12 Uhr.
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