Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Nur starten wenn anderes Programm NICHT ausgeführt wird.

  Alt 13. Okt 2003, 15:28
Moin Rapthor,

so ein Abfrage gehört am Besten einmal in die Projektdatei, bevor noch Application.Initialize aufgerufen wird.
Wichtig:
Der Name den Du bei CreateMutex angibts ist nicht der Name eines Programmes, sondern ein frei wählbarer Name.

Die Prüfung funktioniert mit Mutex also nur, wenn entweder alle beteiligten Programm von Dir stammen, und Du den Namen des Mutex beeinflussen kannst, oder wenn Du weisst, wie die Mutexnamen, der Programme sind.
Sind es Fremdprogramme müsstest Du über einen anderen Weg (Hier im Forum suchenEnumWindows, Hier im Forum suchenCreateToolhelp32Snapshot) prüfen, ob sie laufen.

Mal ein Beispiel für Mutex:

Delphi-Quellcode:
program Project1;

uses
  Forms,
  windows,
  dialogs,
  Unit1 in 'Unit1.pas{Form1};

{$R *.RES}

var
  hMutex1 : DWORD;
  hMutex2 : DWORD;
  dwError1 : DWORD;
  dwError2 : DWORD;

begin
  hMutex1 := CreateMutex(nil,true,'Name des ersten Mutex');
  dwError1 := GetLastError;
  hMutex2 := CreateMutex(nil,true,'Name des zweiten Mutex');
  dwError2 := GetLastError;
  try
    if (dwError1 = ERROR_ALREADY_EXISTS) xor (dwError2 = ERROR_ALREADY_EXISTS) then begin
      if dwError1 = ERROR_ALREADY_EXISTS then begin
        ShowMessage('Meldung1');
        exit;
      end;
      ShowMessage('Meldung2');
      exit;
    end;
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  finally
    if hMutex1 <> 0 then CloseHandle(hMutex1);
    if hMutex2 <> 0 then CloseHandle(hMutex2);
  end;
end.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat