Ich würde mal mkinzlers Beitrag 4 zustimmen.
vorallem wenn man eingene Deklarationen/Implementationen von etwas verwendet, dann sollte man schonmal aufpassen, daß auch die Richtigen APIs implentiert werden und dieses auch noch richtig, damit der Compiler notfalls auch mal Fehlermeldungen bezüglich AnsiChar<>Char<>WideChar ausgeben kann (gibt unterschiedliche APIs für
Ansi und
Unicode)
Delphi-Quellcode:
function ProcessIsRunning(ExeName: string): Boolean;
(*
** This routine examines Windows processes currently running to see if a
** certain program is running.
**
** sExe : The executable name of the program to check.
** Result: True if the program is running, False otherwise.
*)
var
liI, lSnapShot: Longint;
rProcess : TProcessEntry32;
begin
Result := False;
ExeName := ExtractFileName(ExeName);
lSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if lSnapShot <> 0 then
try
rProcess.dwSize := SizeOf(rProcess);
if Process32First(lSnapShot, rProcess) then
repeat
if AnsiSameText(ExeName, rProcess.szExeFile) then begin
Result := True;
Exit;
end;
until not Process32Next(lSnapShot, rProcess);
finally
CloseHandle(lSnapShot);
end;
end;
PS:
Nur den Dateinamen zu prüfen ist nicht nicht sicher, da man auch gleichnamige Programme aus unterschiedlichen Verzeichnis starten kann,
oder versuch es inkl. der kompletten Pfade:
Was willst du denn damit erreichen?
eventuell ist
OneInstance (und was es sonst noch dazu im Forum zu finden gibt) was Passenderes.