![]() |
Nur starten wenn anderes Programm NICHT ausgeführt wird.
Die Frage kam schonmal von mir, allerdings wusste ich da nicht, wie ich es quelltextmäßig realisieren sollte, dass ich mit folgendem nicht nur überprüfen lasse ob eine gewisse "Festung.exe" läuft, sondern auch on eine client.exe läuft:
Delphi-Quellcode:
Ich möchte zusätzlich, dass das Programm eine Fehlermeldung "Client.exe läuft bereits !" ausgibt, wenn dies der Fall ist. Bedingung für das abbrechen soll also sein, dass entweder eine Festung.exe bereits läuft oder eine client.exe (nichtausschließendes ODER).
Initialization
mHandle := CreateMutex(nil, True, 'Festung.exe'); if GetLastError = ERROR_ALREADY_EXISTS then begin ShowMessage('Programm wird bereits ausgeführt'); Halt; end; finalization if mHandle <> 0 then CloseHandle(mHandle); Danke für eure Hilfe |
Re: Nur starten wenn anderes Programm NICHT ausgeführt wird.
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 ( ![]() ![]() 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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