Чуваки, а как завершить процесс из моей проги, например svchost.exe???
ShadowWatcher
2.12.2004 23:00
Легко и просто. Открываешь его с правом на Terminate и именно это с ним производишь.
xds
3.12.2004 7:44
В общем виде задача решается с помощью функции TerminateProccess. При вызове ей необходимо указать логический номер (handle), возвращаемый функцией OpenProcess. Последней требуется идентификатор процесса, способы определения которого варьируются для различных реализаций Win32 API (имеется в виду случай, когда нужно завершить процесс, созданный другим приложением).
Вот пример функции, возвращающей идентификатор процесса по имени файла образа:
// Get id of a process function LocateProcess(const ImageName: String): Integer; var Snapshot, ProcessHandle, ModuleHandle, i: Integer; BytesRead: Cardinal; ProcessEntry: TProcessEntry32; ExeFile: String; PIDs: array[0..4095] of DWord; begin Result := 0; Snapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); SetLength(ExeFile, Length(ImageName)); if Snapshot <> 0 then begin // Processes enumeration loop for Windows 9x, Me, 2000 // ToolHelp32 API ProcessEntry.dwSize := SizeOf(TProcessEntry32); if Process32First(Snapshot, ProcessEntry) then repeat if AnsiSameText(ImageName, ExtractFileName(ProcessEntry.szExeFile)) then begin Result := ProcessEntry.th32ProcessID; Break; end; until not Process32Next(Snapshot, ProcessEntry); CloseHandle(Snapshot); end else // Processes enumeration loop for Windows NT, 2000 PSAPI if EnumProcesses(@PIDs, SizeOf(PIDs), BytesRead) then begin for i := 0 to BytesRead shr 2 - 1 do begin ProcessHandle := OpenProcess(PROCESS_VM_READ or PROCESS_QUERY_INFORMATION, False, PIDs[i]); if ProcessHandle <> 0 then begin ExeFile := ''; if EnumProcessModules(ProcessHandle, @ModuleHandle, SizeOf(ModuleHandle), BytesRead) then GetModuleBaseName(ProcessHandle, ModuleHandle, PChar(ExeFile), Length(ExeFile) + 1); CloseHandle(ProcessHandle); if AnsiSameText(ImageName, ExeFile) then begin Result := PIDs[i]; Break; end; end; // then end; // for end; // then end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.