Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Вниз

kill process 


avk   (2002-02-13 21:40) [0]

смотрим какие процессы загружены, доюавляем их в ListBox

procedure TForm1.Button1Click(Sender: TObject);
VAR Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN
IF (Wnd <> Application.Handle) AND IsWindowVisible(Wnd)
AND (GetWindow(Wnd, gw_Owner) = 0)
AND (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
end;

Потом выбираем нужный и нажимаем на кнопку KILL.
а вот что писать в процедуре нажатия кнопки KILL ничего не понял...все FAQ прочитал так и не дошло...подскажите плиз..если можно то рабочи код вывесети..



Anonymous   (2002-02-14 01:12) [1]

http://rsdn.ru/?qna/?baseserv/killproc.xml (C++)



avk   (2002-02-14 12:26) [2]

в теории все вроде понятно...но там на C++
..а есть ли на Delphi



Fellomena   (2002-02-14 12:34) [3]

Я делала следующим образом: при получении инфы о всех процессах, полную инфу о каждом сохраняла в структуре, а структуру добавляла в список типаTList.
Потом, когда надо было "убить" процесс, делала что-то типа такого:

for i:=0 to ListBox1.Items.Count do
begin
if ListBox1.Items[i].Selected then // тут могу наврать - пишу по памяти
MyVar:= MyListOfProcStruct[i];
SendMessage(MyVar^.Handle, WM_QUIT, 0, 0); // на самом деле убивала подругому, но как - не помню, если сам не разберёшься - пришлю рабочий пример.



Bachin   (2002-02-14 13:27) [4]

это KILL :)

program kill;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, Messages;
var
h: THandle;
p: PChar;
begin
if ParamCount = 0 then
begin
WriteLn("kill processID");
Halt(0);
end;

try
h := StrToInt(ParamStr(1));
except
WriteLn("wrong parameter");
Halt(0);
end;

getmem(p, 201);
try
GetWindowText(h, p, 200);
if length(trim(string(p))) > 0 then
begin
WriteLn(Format("close window %d %s", [h, string(p)]));
SendMessage(h, WM_CLOSE, 0, 0);
WriteLn(Format("kill process %d %s", [h, string(p)]));
DestroyWindow(h);
end
else
WriteLn(Format("unknown processID %d", [h]));
finally
freemem(p);
end;
end.



Milz   (2002-02-14 16:09) [5]

При просмотре окон запоминать WindowHandle, например вместо
ListBox1.Items.Add(StrPas(buff));
применять
ListBox1.Items.AddObject(StrPas(buff),tObject(Wnd));

На кнопку KILL несколько вариантов:

1. Говорит окну приложения завершить работу
PostMessage(WindowHandle, WM_QUIT, 0, 0);

2. Завершить процесс, который вызвал данное окно
GetWindowThreadProcessID(WindowHandle, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);


3. Окошко "Программа выполнила недопустимую операцию ..." (сори, не помню кто это писал)

function EndTask(Wnd: HWND; PrID: DWORD; Title: PChar; Flags: DWORD): DWORD; stdcall; external "user32.dll";

Wnd - ссылка на окно, процесс которого нужно завершить
PrID - идентификатор процесса, который нужно завершить
( используется либо Wnd либо PrID. Преимущество отдается Wnd)
Title - используется если не задан Wnd, а задан PrID. Этот текст выводится в заголовке системного окна "Приложение не реагирует ... " Если же задана ссылка на окно Wnd, то используется заголовок окна, а этот параметр игнорируется.
Flags =
0 - Выводится системное окно "Приложение не реагирует на системные запросы ... " с кнопками "Завершить задачу" и "Отменить"
1 - Выводится системное окно "Приложение не реагирует на системные запросы ... " с кнопками "Подождать", "Завершить задачу" и "Отменить"
>1 - Ничего не выводится, нриложение завершается.

Возвращаемое значение:
0 - Ошибка в параметрах
2 - Пользователь нажал "Отмена" или такого процесса/окна не существует.
3 - Процесс успешно завершен.
4 - Пользователь нажал кнопку "Подождать"







Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.029 c
1-46371           Biorobot              2002-04-01 18:54  2002.04.15  
как сделать: неактив. прога учитывала бы нажатие клавиш?


1-46422           Valentain             2002-04-02 19:30  2002.04.15  
RichEdit1 -> RichEdit2 без потери качества...


3-46270           vopros                2002-03-26 09:24  2002.04.15  
Как программно добавить поле в таблицу Paradox. Знаю что вопрос недавно был. Но я его не нашел.


1-46355           michael_B             2002-04-03 19:40  2002.04.15  
помогите начинающему TComboBox.Items


7-46527           Fellomena             2002-01-18 14:06  2002.04.15  
API, System resources and ******* (inside)