![]() |
Prüfen, ob eine Anwendung läuft
Moin,
ich habe aus der Codelibrary folgende Funktion eingesetz: ![]() Allerdings ein wenig verändert, damit es an meine Applikation passt:
Delphi-Quellcode:
mein Aufruf ist folgendermaassen:
function TFrm_login.GetProcessID(Exename: string): DWORD;
var hProcSnap: THandle; pe32: TProcessEntry32; begin result := 0; hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); if hProcSnap <> INVALID_HANDLE_VALUE then begin pe32.dwSize := SizeOf(ProcessEntry32); if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do begin if pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; end; end; CloseHandle(hProcSnap); end; end; function TFrm_login.GetProcessHandleFromID(ID: DWORD): THandle; begin result := OpenProcess(SYNCHRONIZE, False, ID); CloseHandle(result); end; function TFrm_login.laufzeitcheck : boolean; var hProcess: THandle; wf: DWORD; begin result := true; hProcess := GetProcessHandleFromID(GetProcessID('Anwendung.exe')); if hProcess = 0 then result := false; // läuft nicht end; if not laufzeitcheck then begin start applikation ... ... ... ... end else begin showmessage('Applikation läuft bereits'); end; Allerdings wird in jedem fall in die Variable hProcess <> 0. Somit kann die Applikation nie gestartet werden. Wer hat eine Idee? Gruss EL |
Re: Prüfen, ob eine Anwendung läuft
Ist logisch, da dein Programm ja schon im Speicher ist, wenn geprüft wird ob dein Programm geladen wird...
|
Re: Prüfen, ob eine Anwendung läuft
Alternativ kannst du auch im OnCreate Ereignis über FindWindow gehen. Da im OnCreate das eigene Fensterhandle noch nicht erzeugt ist, wirst du deine eigene Anwendung somit auch nicht finden, sondern nur eine eventuell laufende.
|
Re: Prüfen, ob eine Anwendung läuft
Zitat:
Gruss EL |
Re: Prüfen, ob eine Anwendung läuft
Du könntest auch ein Semaphore benutzten. Für Details bin ich zu müde. Aber die Delphi-Praxis-Suche sollte trotzdem ausreichen.
Gruß DelphiFreund |
Re: Prüfen, ob eine Anwendung läuft
Meine Idee schlug fehl... Über FindWindow ist die eigene Anwendung bereits findbar. Ne andere Möglichkeit fällt mir aber im Moment auch nicht ein?
|
Re: Prüfen, ob eine Anwendung läuft
Dann bin ich dran:
Delphi-Quellcode:
Die MyGuid sollte eine GUID sein, muss es gaub ich aber nicht
const
MyGUID = 'hex-Zahl'; var Semaphore: THandle; begin ActivationMessage := RegisterWindowMessage(PChar(MyGUID)); Semaphore := CreateSemaphore(nil, 1, 1, PChar(MyGUID)); if (GetLastError = ERROR_ALREADY_EXISTS) then begin ShowMessage('Das Programm läuft schon'); Exit; end; end; Gruß und gute Nacht DelphiFreund |
Re: Prüfen, ob eine Anwendung läuft
Hallo,
das Beispiel von DelphiFreund ist schon ganz gut. Du musst es direkt im Projektquelltext vor dem ersten Application.CreateForm einbauen. P.S. am Ende der Anwendung CloseHandle(Semaphore); nicht vergessen. Ist zwar nicht nötig, da Windows alle Objekthandles selber schliesst wenn der primäre Thread terminiert. Wenn alle Objekthandles geschlossen sind entfernt Windows automatisch das Semaphore-Objekt. Sieht aber besser aus. |
Re: Prüfen, ob eine Anwendung läuft
Sorry, das hab ich vergessen zu erwähnen. Danke für den Hinweis.
|
Re: Prüfen, ob eine Anwendung läuft
Zitat:
ActivationMessage := RegisterWindowMessage(PChar(MyGUID)); Gruss EL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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 by Thomas Breitkreuz