Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-46436
Socrat
2002-04-02 05:32
2002.04.15
От чего зависит доступность кнопок печати в QuickReports Preview?


3-46242
ava
2002-03-25 00:03
2002.04.15
SQL вопрос


3-46286
Vitek
2002-03-26 12:43
2002.04.15
Database Desktop


1-46343
Biorobot
2002-04-01 18:28
2002.04.15
Куда мои вопросы деваются?


1-46442
Glonia Zbanov
2002-04-03 10:04
2002.04.15
Application.MessageBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский