Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.008 c
7-27758
Константин
2003-07-23 22:31
2003.10.09
Как изменить разрешение экрана?


3-27384
Lamer1
2003-09-18 16:17
2003.10.09
Проблемы с TClientDataSet


1-27551
bfg1000ke
2003-09-29 16:26
2003.10.09
hide process


8-27610
volodya_
2003-05-15 10:09
2003.10.09
Громкость звучания mp3


3-27411
satron
2003-09-18 10:13
2003.10.09
Как сделать запись в таблице Paradox на французском языке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский