Другие языки программирования и технологии

Delphi i WinApi

Доброе время суток)
Задачка такая нужно найти процесс напрмер sample.exe и закрыть его подскажите как реализуется?
Для принудительного и безоговорочного завершения процессов в Win32 служит функция TerminateProcess:
BOOL TerminateProcess(
HANDLE hProcess, // описатель процесса
DWORD dwExitCode // код завершения процесса
);

Функцию TerminateProcess следует использовать только в исключительных случаях, когда исчерпаны все другие способы воздействия на процесс, поскольку она не позволяет потокам процесса выполнить очистку или сохранить данные, а также не оповещает загруженные DLL о завершении процесса.

hProcessSnp=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (Process32First(hProcessSnp, pe32))
begin
repeat
if (not strcmp(pe32.szExeFile,"sample.exe"))
begin
hpr = OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID);
TerminateProcess(hpr,0);
break;
end
until (Process32Next(hProcessSnp, pe32));
end;
CloseHandle(hProcessSnp);

Прибьет кого хотишь.. . (Почти)
Ерлан Шакелеков
Ерлан Шакелеков
13 526
Лучший ответ
Ну, первое тупое решение
system("taskkill /F /IM sample.exe");
Ильдар Шарипов
Ильдар Шарипов
91 677
знаю но на с++
Создай кнопку, ListBox и повесь на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
{Размещаем имена модулей запущенных/минимизированных задач в ListBox }
var
pTask: pTaskEntry; {требуется Uses ToolHelp}
Task: bool;
Pstr: array[0..79] of Char;
Str: string[80];
byt_j: byte;
begin
ListBox1.Clear;
GetMem(pTask, SizeOf(TTaskEntry)); {Резервируем память для TaskEntry}
pTask^.dwSize := SizeOf(TTaskEntry);

byt_j := 0; {Устанавливаем счетчик для количества задач}
Task := TaskFirst(pTask); {Ищем первую задачу}
while task do
begin
inc(byt_j); {счетчик количества различных задач}
Str := StrPas(pTask^.szModule); {Преобразуем PStr в паскалевскую строку}
Listbox1.Items.Add(str); {Сохраняем паскалевскую строку в ListBox}
task := taskNext(pTask); {Ищем следующую возможную задачу}
end;
Label1.Caption := IntToStr(byt_j) + ' задач найдено'; {Показываем счетчик}
end;

А убивать как-то так: TerminateApp(pTask^.hTask, NO_UAE_BOX);