Moin,
ich habe aus der Codelibrary folgende Funktion eingesetz:
http://www.delphipraxis.net/internal...ct.php?t=30942
Allerdings ein wenig verändert, damit es an meine Applikation passt:
Delphi-Quellcode:
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;
mein Aufruf ist folgendermaassen:
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