Oft wird ja gefragt, wie man rausfinden kann, ob eine bestimmte Anwendung läuft. Meist wird geantwortet, man soll einen SnapShot machen oder mit EnumProcesses die Prozesse sich auflisten lassen und dann kucken, ob der gesuchte Prozess auftaucht. Es geht aber auch eleganter.
Delphi-Quellcode:
uses
tlhelp32, ShellAPI;
function 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 GetProcessHandleFromID(ID: DWORD): THandle;
begin
result := OpenProcess(SYNCHRONIZE, False, ID);
CloseHandle(result);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hProcess: THandle;
wf: DWORD;
begin
bClose := False;
Button1.Enabled := False;
while bClose = False do
begin
hProcess := GetProcessHandleFromID(GetProcessID('notepad.exe'));
if hProcess = 0 then
Label1.Caption := 'Notepad läuft nicht'
else
Label1.Caption := 'Notepad läuft';
Application.HandleMessage;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bClose := True;
end;