Китайский AI говорит так:
| Код | program TerminateProcessExample;
{$APPTYPE CONSOLE}
uses System.SysUtils, Winapi.Windows;
function TerminateSystemProcess(const ProcessName: AnsiString): Boolean; var SnapHandle: THandle; ProcEntry: TProcessEntry32; ProcessHandle: THandle; begin Result := False;
// Создаем снимок всех процессов SnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if SnapHandle = INVALID_HANDLE_VALUE then begin Writeln('Не удалось создать снимок процессов.'); Exit; end;
try ProcEntry.dwSize := SizeOf(TProcessEntry32);
// Перебираем все процессы if Process32First(SnapHandle, ProcEntry) then repeat // Сравниваем имя процесса (без учета регистра) if AnsiSameText(ExtractFileName(ProcEntry.szExeFile), ProcessName) then begin Writeln(Format('Найден процесс: %s (PID: %d)', [ProcEntry.szExeFile, ProcEntry.th32ProcessID]));
// Открываем процесс с правами TERMINATE ProcessHandle := OpenProcess(PROCESS_TERMINATE, False, ProcEntry.th32ProcessID); if ProcessHandle = 0 then begin Writeln(Format('Не удалось открыть процесс %s. Код ошибки: %d', [ProcEntry.szExeFile, GetLastError])); Continue; end;
try // Принудительно завершаем процесс if TerminateProcess(ProcessHandle, 0) then begin Writeln(Format('Процесс %s успешно завершен.', [ProcEntry.szExeFile])); Result := True; end else begin Writeln(Format('Не удалось завершить процесс %s. Код ошибки: %d', [ProcEntry.szExeFile, GetLastError])); end; finally CloseHandle(ProcessHandle); end; end; until not Process32Next(SnapHandle, ProcEntry); finally CloseHandle(SnapHandle); end; end;
begin try // Завершаем процесс по имени (например, notepad.exe) if ParamCount > 0 then begin if TerminateSystemProcess(AnsiString(ParamStr(1))) then Writeln('Операция завершена успешно.') else Writeln('Процесс не найден или не удалось его завершить.'); end else Writeln('Использование: TerminateProcessExample <имя_процесса>'); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end;
Readln; // Ожидание, чтобы консоль не закрылась end.
|
|