Форум: "WinAPI";
Текущий архив: 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 - Пользователь нажал кнопку "Подождать"
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c