Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

Как "прибить" процесс?   Найти похожие ветки 

 
}|{yk ©   (2004-07-23 20:54) [0]

Ткой вот код не проходит
 GetExitCodeProcess(Application.Handle, lpExitCode);
 TerminateProcess(Application.Handle, lpExitCode);


 
}|{yk ©   (2004-07-23 21:39) [1]

Сработало так...
 hp := OpenProcess(PROCESS_ALL_ACCESS, false, GetPidFromProcessName(Application.ExeName));
 GetExitCodeProcess(hp, lpExitCode);
 TerminateProcess(hp, lpExitCode);
 CloseHandle(hp);
из JCL


 
Кириешки ©   (2004-07-24 09:02) [2]

Может быть так ...

procedure Snapshoot(ClassName: PChar; WindowTitle: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(PChar(ClassName), PChar(WindowTitle));
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Snapshoot(nil, pchar(Edit1.text);
end;


 
Fagot   (2004-07-24 10:14) [3]

Установи Дебаг приоритет


 
Piter ©   (2004-07-25 01:03) [4]

Как получить список процессов
вопрос N10

Будем пользоваться функцией CreateToolhelp32Snapshot, она реализована как в NT системах, так и в 9x. В NT она использует пресловутую NtQuerySystemInformation, которая недокументированна.
Заголовок CreateToolhelp32Snapshot и остальные типы описаны в модуле TlHelp32.
CreateToolhelp32Snapshot может делать снимок процессов и куч, модулей, потоков, используемых процессом. Она заносит требуемые данные в некоторую структуру (снимок) и возвращает ее описатель. После использования нужно закрыть описатель.
Работать со снимком можно с помощью функций Process32First, Process32Next, Thread32First , Thread32Next и так далее (описаны в Win32 SDK в разделе "Tool Help Functions"). Эти функции заносят информацию о конкретном процессе, потоке и т.д. из снимка в структуры типа TProcessEntry32, TThreadEntry32.
Итак, будем получать список процессов и заносить их названия в ListBox1, который лежит у нас на форме:

procedure TForm1.Button1Click(Sender: TObject);
var
 HSnapShot: THandle;
 pe: TProcessEntry32;
begin
 listbox1.Clear; //очишаем наш ListBox1
 HSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //нам нужен снимок процессов
 pe.dwSize := sizeof(ProcessEntry32); //перед использованием TProcessEntry32 нужно заполнить поле dwSize
 if Process32First(HSnapShot, pe) then // если первая запись о процессах получена - продолжаем
  repeat
    listbox1.Items.Add(pe.szExeFile); // добавляем в ListBox
  until ( not Process32Next(HSnapShot,pe) ); // получаем запись о следующем процессе, если не получаем - выходим из цикла
 closehandle(HSnapShot); // закрываем описатель снимка
end;

Как убить процесс?

Объяснять не буду - вот вырезка из программы:

var
 PH:THandle;
begin
PH:=OpenProcess(PROCESS_ALL_ACCESS,false,pe.th32ProcessID);
if PH=0 then
 showmessage("Ошибка OpenProcess");
if TerminateProcess(PH,0)=false then
 showmessage("Ошибка TerminateProcess);
end;

где pe - структура TProcessEntry32 для терминируемого процесса. Или просто надо в OpenProcess подставлять Id процесса, полученное каким-либо способом ранее (например, как в первом примере).

P.S. Чтобы убить системные процессы нужно получить Debug привелегии:

var
hToken:THandle;
sedebugnameValue:Int64;
tkp:TTokenPrivileges;
ReturnLength:Cardinal;
begin
//Получаем SeDebugPrivilege
// Получаем дескриптор нашего процесса
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken )
then exit;

// Получаем LUID привилегии
if not LookupPrivilegeValue( nil, "SeDebugPrivilege", sedebugnameValue )
then begin
 CloseHandle(hToken);
 exit;
end;

tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid := sedebugnameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

// Добавляем привилегию к нашему процессу
if not AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength)
then showmessage("Ошибка при получении Debug-привилегиии");
CloseHandle( hToken );
if (GetLastError<>ERROR_success) then
showmessage("Ошибка получения привелегий");


Получить Debug привелегии может только администратор (программы, запущенные из под администратора)



Страницы: 1 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
6-1088789111
Delphistik
2004-07-02 21:25
2004.09.05
работа с IP адресом


1-1092811562
besen-ok
2004-08-18 10:46
2004.09.05
Подскажите как мне добавить картинки в проект ?


3-1092140802
Koala
2004-08-10 16:26
2004.09.05
Ковертация из Dbase в Firebird


1-1093153757
SNV-Soft
2004-08-22 09:49
2004.09.05
Сохранить часть формы в файл


4-1090306483
TKV
2004-07-20 10:54
2004.09.05
Помогите поймать данные посылаемые из дос программы в порт LPT