В интернетах есть сниппет на дельфях, показывающий как убить процесс с помощью функций из TlHelp32 и юзая апишку OpenProcess с флагом PROCESS_TERMINATE=$0001; (Именуется он KillTask, гуглите)
Также интернетах есть много кодеса для того чтобы отсделить запущенный тобой процесс (т.е. порадить его и потом отследить конец работы - гугли WinExecAndWait и тому подобное).
А что делать в случае, если процесс запущен не тобой?
Так вот я переписал буквально строчку кода для обнаружения запущен ли процесс или нет.
сам кодес...
юзаем так:
Также интернетах есть много кодеса для того чтобы отсделить запущенный тобой процесс (т.е. порадить его и потом отследить конец работы - гугли WinExecAndWait и тому подобное).
А что делать в случае, если процесс запущен не тобой?
Так вот я переписал буквально строчку кода для обнаружения запущен ли процесс или нет.
сам кодес...
Код:
function CheckProcessByExeName(ExeFileName: string): integer;
const PROCESS_QUERY_INFORMATION=$0400;
var ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
hProcess : Cardinal;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
ExeFileName := UpperCase(ExeFileName);
while integer(ContinueLoop) <> 0 do
begin
if ( (UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = ExeFileName) or
(UpperCase(FProcessEntry32.szExeFile) = ExeFileName)
) then
begin
hProcess := OpenProcess( PROCESS_QUERY_INFORMATION, BOOL(0), FProcessEntry32.th32ProcessID);
Result := hProcess;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
юзаем так:
Код:
while CheckProcessByExeName('calc.exe') <> 0 do begin
// let's sleep 200 mls
Sleep(200);
end;
ShowMessage('Proc was done')