Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Убийство процессов


Страницы:   1 2

DelphiNew ©   (2003-08-04 10:49:00) 

Люди поможите чем сможете!!! Не могу понять почему не убивается процесс, хотя при компиляции ошибок не выдаёт??

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

procedure TForm1.BtnKillPrcClick(Sender: TObject);
begin
killprogram(nil,pchar(listbox1.Items.Strings[listbox1.ItemIndex]));
sleep(100);
BtnPrcClick(form1);
end;


DelphiNew   (2003-08-05 10:50:00) [1]

Люди спасибо всем за помощь теперь всё работает!!!!!!


Ancara   (2003-08-04 16:24:00) [2]

Положил на http://ancara.narod.ru


Ancara   (2003-08-04 16:17:00) [3]

Удалено модератором
Примечание: Личная переписка


Ancara   (2003-08-04 16:15:00) [4]

Удалено модератором
Примечание: Личная переписка


Spy   (2003-08-04 16:07:00) [5]

Удалено модератором
Примечание: Личная переписка


Ancara   (2003-08-04 16:03:00) [6]

Ooops, sorry!
Прошу lsvProcess читать как ListView1.
Забыл поменять...


Ancara   (2003-08-04 16:02:00) [7]

Да, и еще, DelphiNew, я так понимаю ты составляешь список из окон в ListBox, а потом по выделенному заголовку окна определяешь какой процесс?
А если строить список сразу из процессов?
Например так:

var
hSnap : THandle;
lppe : tagPROCESSENTRY32;
begin
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnap, lppe) then
begin
ListView1.Items.Clear;
ListView1.Items.Add;
ListView1.Items.Item[0].Caption:=lppe.szExeFile;
ListView1.Items.Item[0].SubItems.Add(IntToHex(lppe.th32ProcessID, 8));
ListView1.Items.Item[0].SubItems.Add(IntToHex(lppe.th32ParentProcessID, 8));
ListView1.Items.Item[0].SubItems.Add(IntToStr(lppe.cntThreads));
ListView1.Items.Item[0].SubItems.Add(IntToStr(lppe.pcPriClassBase));
end;
while Process32Next(hSnap, lppe) do
begin
ListView1.Items.Add;
ListView1.Items.Item[lsvProcess.Items.Count-1].Caption:=lppe.szExeFile;
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToHex(lppe.th32ProcessID, 8));
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToHex(lppe.th32ParentProcessID, 8));
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToStr(lppe.cntThreads));
( IntToStr(lppe.pcPriClassBase)

Да, и еще, DelphiNew, я так понимаю ты составляешь список из окон в ListBox, а потом по выделенному заголовку окна определяешь какой процесс?
А если строить список сразу из процессов?
Например так:

var
hSnap : THandle;
lppe : tagPROCESSENTRY32;
begin
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnap, lppe) then
begin
ListView1.Items.Clear;
ListView1.Items.Add;
ListView1.Items.Item[0].Caption:=lppe.szExeFile;
ListView1.Items.Item[0].SubItems.Add(IntToHex(lppe.th32ProcessID, 8));
ListView1.Items.Item[0].SubItems.Add(IntToHex(lppe.th32ParentProcessID, 8));
ListView1.Items.Item[0].SubItems.Add(IntToStr(lppe.cntThreads));
ListView1.Items.Item[0].SubItems.Add(IntToStr(lppe.pcPriClassBase));
end;
while Process32Next(hSnap, lppe) do
begin
ListView1.Items.Add;
ListView1.Items.Item[lsvProcess.Items.Count-1].Caption:=lppe.szExeFile;
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToHex(lppe.th32ProcessID, 8));
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToHex(lppe.th32ParentProcessID, 8));
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToStr(lppe.cntThreads));
ListView1.Items.Item[lsvProcess.Items.Count-1].SubItems.Add(IntToStr(lppe.pcPriClassBase));
end;
CloseHandle(hSnap);

end;

При условии, что на форме стоит ListView1 (ViewStyle: vsReport) с такими колонками:
Name
ProcessID
ParentProcessID
Threads
Base Priority


Ancara   (2003-08-04 15:41:00) [8]

Spy, ты че парню лапшу на уши вешаешь - ExitWindowsEx-совсем другое дело, а если так:

var
ProcessID : integer;
hProcess : THandle;
begin
hProcess:=OpenProcess(PROCESS_ALL_ACCESS, true, ProcID);
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
end;

то это работает под любой виндой.
DelphiNew: как видишь, разница только в одном:
PROCESS_ALL_ACCESS.
У меня убивает все что можно,т.е. кроме служб и намертво повисших процессов (када винда пишет "идет типа отладка")


Spy   (2003-08-04 14:50:00) [9]

Конечно у тебя нет прав так просто закрыть посторонний процесс...
По дефолту ты даже тачку через ExitWindowsEx незашатданишь
Ты должен через AdjustTokenPriveleges дать себе право закрывать другие процессы
а ваще MSDN почитай - там все подробно описано


DelphiNew   (2003-08-04 12:48:00) [10]

Попробую....


VMcL   (2003-08-04 12:19:00) [11]

>DelphiNew © (04.08.03 10:49)

CloseHandle ?


N169   (2003-08-04 11:48:00) [12]

Ох... Наверно, ничего не даст...


DelphiNew   (2003-08-04 11:43:00) [13]

А что эта функция мне даст?? насколько я понимаю ею мы получаем код сообщения Windows


N169   (2003-08-04 11:37:00) [14]

А может GetLastError() ?


DelphiNew   (2003-08-04 11:37:00) [15]

А возможно ли такое что эта функция просто не работает под NT???


DelphiNew   (2003-08-04 11:27:00) [16]

Насколько я понял нужно проверить не возвращает ли функция пустое значение??? Но как это влияет на работоспасобности процедуры??? Ведь если возвращается пустое значение то просто выдаётся ошибка List index out of bounds???


Игорь Шевченко   (2003-08-04 11:05:00) [17]


> Как это осуществить???


if ... then ... :)))


DelphiNew   (2003-08-04 11:02:00) [18]

2Игорь Шевченко
Как это осуществить???


DelphiNew   (2003-08-04 11:01:00) [19]

2N169
Если имеется ввиду система то я нахожусь на правах администратора


Игорь Шевченко   (2003-08-04 10:56:00) [20]

Где, БЛИН, проверки значений, возвращенных функциями ? !!!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо