Форум: "WinAPI";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
ВнизКак разрушать чужие окна? Найти похожие ветки
← →
BVV (2004-07-14 16:21) [0]Сначала получаю список всех видимых окон, потом пытаюсь разрушить нужные мне. Так вот окна Microsoft Word, Microsoft Excel уходят со сцены без лишних вопросов, а вот другие кукиш (даже калькулятор выпендривается). Где я облажался ошибся?
procedure TForm1.Button1Click(Sender: TObject);
var
cap:pAnsiChar;
begin
cap:=pchar(Edit1.text);
h:=FindWindow(nil, cap);
if h=0 then exit;
SendMessage(h, WM_DESTROY, 0,0);
end;
← →
VMcL © (2004-07-14 16:39) [1]>>BVV (14.07.04 16:21)
1. А если не через WM_DESTROY, а через WM_QUIT?
2. А если так:procedure TForm1.Button1Click(Sender: TObject);
var
cap:pAnsiChar;
tid: DWORD;
begin
cap:=pchar(Edit1.text);
h:=FindWindow(nil, cap);
if h=0 then exit;
tid := GetWindowThreadProcessId(h, DWORD(nil^));
PostThreadMessage(tid, WM_QUIT, 0, 0);
end;
?
← →
Artificial Inelligence (2004-07-16 13:12) [2]У меня работает Так:
procedure TForm1.Button1Click(Sender: TObject);
var
h:hwnd;
cap:String;
begin
cap:=Edit1.text;
h:=FindWindow(nil,Pchar(cap));
if h=0 then exit;
SendMessage(h, WM_CLOSE, 0,0);
end;
А вообще лучше чтоб ты знал класс окна,тогда будет работать в любой версии Win(Класс Калькулятора-SciCalc),соответственно парметр FindWindow -первый-Cap,второй Nil.А некоторые окна-дочерные,для начала нужно находить предка FindWindow ,потом ребенка - FindWindoEx,пример:
procedure TForm1.Button1Click(Sender: TObject);var
wndChild:HWND;
wndParent:HWND;
begin
wndParent:=FindWindow("Shell_TrayWnd",nil);
if wndParent<> 0 then
begin
wndChild:=FindWindowEx(wndParent,0,"Button",nil);
if wndChild <> 0 then
begin
SendMessage(wndChild, WM_CLOSE, 0,0);
end;
end;
Данный код убирает Пуск,родителем которого является Панель Задач.
← →
wicked © (2004-07-16 14:30) [3]1. не WM_DESTROY, а WM_CLOSE... тут в общем то и написали...
2. не SendMessage, а PostMessage...
← →
Artificial Inelligence (2004-07-18 06:43) [4]2Wicked:
Блин,какая разница,закрывается все что угодно!
← →
serg128 (2004-07-19 09:47) [5]WM_CLOSE. А ещё кирпичем можно :)
← →
wicked © (2004-07-19 11:11) [6]
> Блин,какая разница
прежде чем так говорить, стоит прочесть справку по SendMessage и PostMessage...
← →
lop (2004-07-20 20:44) [7]Удалено модератором
Примечание: Офтопик и спам
← →
Artificial Intelligence © (2004-07-21 14:49) [8]2Wicked
Ну хорошо,PostMessage не дожидается обработки действия,GetMessage возвращает только после завершения обработки сообщения,а какая разница в этом примере,я не понял,поясни!
← →
wicked © (2004-07-22 14:53) [9]> Artificial Intelligence [8]
а такая - в обработчике сообщения (не обязательно WM_CLOSE) в программе-жертве может быть что угодно, в т.ч. и длинные задержки, вопросы к юзеру и тыды...
SendMessage завесит твою программу и она будет вынуждена ждать, пока программа-жертва отработает обработку сообщения....
PostMessage сразу же вернет управление твоей программе....
← →
Кириешки (2004-07-22 19:43) [10]На вот, разрушай все что хочешь :
procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(PChar(ClassName), PChar(WindowTitle));
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
procedure TForm1.CloseWindows;
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
i : Integer;
BEGIN
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;
Application.ProcessMessages();
{ for i := 0 to ListBox1.Items.Count -1 do
begin
KillProgram(nil,pchar(listbox1.Items[i]));
end;
}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
KillProgram(nil, pchar(listbox1.Items[listbox1.Itemindex]));
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c