IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Мониторинг процессов, Простейшие действия с процессами
сообщение
Сообщение #1


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Как сделать, так что бы в ListBox можно было бы отразить процессы, происходящие в данный момент в системе и при выборе из списка специальной кнопкой их закрывать? Примерно догадываюсь, как это сделать, но как формализовать не додумаюсь? Знаю, что надо сделать снимок системы через SnapShot, подключить модуль Thelp32, а как дальше?

Сообщение отредактировано: Atreides -


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






// Функция завершения процесса - проверено под XP
function ProcessTerminate(dwPID:Cardinal):Boolean;
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
if not OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken)
then exit;

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;

AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
if GetLastError()<> ERROR_SUCCESS then exit;

hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hProcess = 0 then exit;

if not TerminateProcess(hProcess, DWORD(-1)) then exit;
CloseHandle( hProcess );

tkp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() <> ERROR_SUCCESS then exit;

Result:=true;
end;

// Немного поправляем генерацию массива строк:
procedure TForm1.Button1Click(Sender: TObject);
var
SH: Thandle;
Num, I: Integer;
PPE: TProcessEntry32;
Pr_names : array [0..50] of string;
begin
Num := 0;
SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0);
PPE.dwSize := sizeof (ProcessEntry32);
Process32First(SH, PPE);
Pr_Names [Num] := PPE.szExeFile;

while Process32Next(SH, PPE) do begin
Num := Num + 1;
// Храним в самой строке и ProcessID
Pr_Names [Num] := '(' + inttostr(ppe.th32ProcessID) + ') ' + PPE.szExeFile;
end;

Listbox1.Clear;
for I := 0 to Num do Listbox1.Items.Add(Pr_Names[I]);
CloseHandle(SH)
end;

// Изначально button2.enabled = false
// активируется кнопка завершения процесса только при выборе
// некоторого элемента в ListBox-е
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Button2.Enabled := (ListBox1.ItemIndex <> -1);
end;

// Выделяем из строки ProcessID, сообщаем и удаляем процесс...
procedure TForm1.Button2Click(Sender: TObject);
var s: string;
begin
s := ListBox1.Items[ListBox1.ItemIndex];
s := copy(s, pos('(', s) + 1, pos(')', s) - pos('(', s) - 1);
showmessage('process #' + s + ' will be destroyed');

ProcessTerminate(strtoint(s));
end;
Все рабочее, проверено только что на D6 + WinXP
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Atreides   Мониторинг процессов   1.03.2007 19:40
volvo   DRKB3 -> Системные функции и WinAPI -> Windo…   1.03.2007 19:50
Atreides   У меня только версия 2.3 и там есть пример просмот…   2.03.2007 21:04
volvo   // Функция завершения процесса - проверено под XP …   2.03.2007 21:51
Atreides   Зачем править эту строку: Pr_Names [Num] := …   3.03.2007 13:31
volvo   ProcessTreminate взята из DRKB 2.3 - там есть комм…   3.03.2007 14:42
Atreides   А как сделать, что бы после нажатия кнопки заверше…   7.03.2007 15:21
-Volvo-   Добавь вызов Button1Click, чтобы заново сгенериров…   7.03.2007 15:35
Atreides   Как реализовать, чтобы для выбранного процесса из …   11.03.2007 20:40
Atreides   При помощи средств Delphi можно узнать, сколько вр…   12.03.2007 23:18
Atreides   Вот нашел тут одну ссылку, но она на C, а как пере…   14.03.2007 16:54
volvo   А что, собственно, там перегонять? Описания структ…   14.03.2007 17:05
Atreides   С помощью NtQuerySystemInformation, можно получить…   14.03.2007 17:11
volvo   Посмотри вот эту тему, там Rouse_ выкладывал непло…   14.03.2007 17:21
Iren   У меня подобное задание: нужно разработать приложе…   15.03.2007 22:33
Atreides   А как сделать, что бы можно было выбрать процесс и…   18.03.2007 16:48
Atreides   Написал передачу параметров процессов в StringGrid…   22.03.2007 23:49
Atreides   Доделал я это задание (получить список выполняющих…   3.04.2007 22:40
Atreides   Может, кто знает, как получить имя файла и его вер…   15.04.2007 21:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 13:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name