KillExe(ExeName);

3 отговора 150 прегледа
#1

KillExe(ExeName);

Трябва ми такава функция, даваш и като параметър името на някой процес(а не името на прозореца!), примерно photoshop.exe или mirc.exe, тя се опитва да прекрати процеса, и ако е успяла, връща true :-) Може и без да дава резултат, т.е. процедура, но да върши работа...
не ми се ползват пак процедури от вида
WinExec(taskkill /f /im notepad.exe,sw_hide);
......благодаря на всички.

Отговор
в отговор на ShaDoW #2

Има решение

......

uses Tlhelp32;
.
.
function TForm1.KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;

CloseHandle(FSnapshotHandle);
end;

Отговор
в отговор на ShaDoW #3

aha ima

obache bqh zabelqzal stranno povedenie ponqkoga dokolkoto si spomnqm, ako izvikash TerminateProcess vytre v tsikyla kojto gi vadi s Process32Next.

tova koeto mnogo dobre si spomnqm e che pyrvo gi sybirah vsichkite ID-ta i sled tova kato zavyrshi i posledniq Process32Next preminavah kym utrepvane na nuzhnite ID-ta.

Отговор
в отговор на BashBabait #4

Всички PID..

Онова решение, което постнах, убива всички копия на процеса с дадено име, т.е. какъвто и да е PID-a, щом е <name>.exe, процеса се спира...
(при мен засега няма проблем с това решение)

Отговор