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 (
EnumWindows,
CreateToolhelp32Snapshot) 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.