Форум: "WinAPI";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизУбийство процессов Найти похожие ветки
← →
DelphiNew (2003-08-04 10:49) [0]Люди поможите чем сможете!!! Не могу понять почему не убивается процесс, хотя при компиляции ошибок не выдаёт??
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;
← →
N169 (2003-08-04 10:50) [1]Может, правов нет
← →
DelphiNew (2003-08-04 10:53) [2]В смысле... Поподробнее пожалуйста
← →
Игорь Шевченко (2003-08-04 10:56) [3]Где, БЛИН, проверки значений, возвращенных функциями ? !!!
← →
DelphiNew (2003-08-04 11:01) [4]2N169
Если имеется ввиду система то я нахожусь на правах администратора
← →
DelphiNew (2003-08-04 11:02) [5]2Игорь Шевченко
Как это осуществить???
← →
Игорь Шевченко (2003-08-04 11:05) [6]
> Как это осуществить???
if ... then ... :)))
← →
DelphiNew (2003-08-04 11:27) [7]Насколько я понял нужно проверить не возвращает ли функция пустое значение??? Но как это влияет на работоспасобности процедуры??? Ведь если возвращается пустое значение то просто выдаётся ошибка List index out of bounds???
← →
DelphiNew (2003-08-04 11:37) [8]А возможно ли такое что эта функция просто не работает под NT???
← →
N169 (2003-08-04 11:37) [9]А может GetLastError() ?
← →
DelphiNew (2003-08-04 11:43) [10]А что эта функция мне даст?? насколько я понимаю ею мы получаем код сообщения Windows
← →
N169 (2003-08-04 11:48) [11]Ох... Наверно, ничего не даст...
← →
VMcL (2003-08-04 12:19) [12]>DelphiNew © (04.08.03 10:49)
CloseHandle ?
← →
DelphiNew (2003-08-04 12:48) [13]Попробую....
← →
Spy (2003-08-04 14:50) [14]Конечно у тебя нет прав так просто закрыть посторонний процесс...
По дефолту ты даже тачку через ExitWindowsEx незашатданишь
Ты должен через AdjustTokenPriveleges дать себе право закрывать другие процессы
а ваще MSDN почитай - там все подробно описано
← →
Ancara (2003-08-04 15:41) [15]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.
У меня убивает все что можно,т.е. кроме служб и намертво повисших процессов (када винда пишет "идет типа отладка")
← →
Ancara (2003-08-04 16:02) [16]Да, и еще, 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 16:03) [17]Ooops, sorry!
Прошу lsvProcess читать как ListView1.
Забыл поменять...
← →
Spy (2003-08-04 16:07) [18]Удалено модератором
Примечание: Личная переписка
← →
Ancara (2003-08-04 16:15) [19]Удалено модератором
Примечание: Личная переписка
← →
Ancara (2003-08-04 16:17) [20]Удалено модератором
Примечание: Личная переписка
← →
Ancara (2003-08-04 16:24) [21]Положил на http://ancara.narod.ru
← →
DelphiNew (2003-08-05 10:50) [22]Люди спасибо всем за помощь теперь всё работает!!!!!!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c