KillExe(ExeName);
3 отговора
150 прегледа
KillExe(ExeName);
Трябва ми такава функция, даваш и като параметър името на някой процес(а не името на прозореца!), примерно photoshop.exe или mirc.exe, тя се опитва да прекрати процеса, и ако е успяла, връща true :-) Може и без да дава резултат, т.е. процедура, но да върши работа...
не ми се ползват пак процедури от вида
WinExec(taskkill /f /im notepad.exe,sw_hide);
......благодаря на всички.
не ми се ползват пак процедури от вида
WinExec(taskkill /f /im notepad.exe,sw_hide);
......благодаря на всички.
Има решение
......
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;
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;
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.
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.
Всички PID..
Онова решение, което постнах, убива всички копия на процеса с дадено име, т.е. какъвто и да е PID-a, щом е <name>.exe, процеса се спира...
(при мен засега няма проблем с това решение)
(при мен засега няма проблем с това решение)