![]() |
|
|
|
|
#1
|
|||
|
|||
|
Необходимо скрыть чужое окно по заголовку. При этом может быть запущено несколько окон с одинаковыми заголовками, надо их как-либо пронумировать и выбирать - скрыть/отобразить. Я надеюсь на вашу помощь.
искать окно будем при помощи findwindow, а чтобы скрывать окно (точно не знаю, но думаю надо копать sendmessage) нужны какие либо параметры/процедуры. и как искать окна с одинаковыми заголовками? (например нумировать посредством PID, или порядок запущеных окон. Заранее спасибо! |
|
#2
|
|||
|
|||
|
Скрыть - послать сообщение SW_HIDE.
Перебор окон - см. EnumWindows. Получаешь хэндл окна (кстати, вот тебе нумератор, т.к. он повторяться не может), по нему вытаскиваешь заголовок и по нему же посылаешь сообщение. |
|
#3
|
||||
|
||||
|
вот код проги, которая выводит в мемо имена всех найденых окон:
Код:
procedure GetWinsNames(var outName: string);
var
Wnd: hWnd;
buff: array [0..127] of Char;
begin
outName:= '';
Wnd:= GetWindow(Form1.Handle, gw_HWndFirst);
while Wnd <> 0 do
begin
ZeroMemory(@buff, SizeOf(buff));
if (Wnd<>Application.Handle) and
(IsWindowVisible(Wnd){or checkbox1.checked}) and //checkbox1.checked - показывать скрытые окна
((GetWindow(Wnd, gw_Owner)=0) {or checkbox2.checked}) and //checkbox2.checked - показывать остальные окна
(GetWindowText(Wnd, buff, SizeOf(buff))<>0) then
begin
outName:= outName + buff + #13#10;
//тут можно поколдавать с Wnd
end;
Wnd:= GetWindow(Wnd, gw_hWndNext);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
GetWinsNames(s);
Memo1.Text:= s;
end; |
|
#4
|
|||
|
|||
|
Цитата:
я понимаю что SW_HIDE, я несовсем знаю sendmessage.. SendMessage(hand_le, {тут?}, {тут?}, {тут?}); гдето SW_HIDE, понятно, и где? и что в остальных параметрах? |
|
#5
|
||||
|
||||
|
Цитата:
Код:
ShowWindow(Handle, SW_HIDE); Код:
SendMessage(Handle, WM_SHOWWINDOW, SW_HIDE, sw_ParentClosing); Последний раз редактировалось Karsh, 15.04.2009 в 22:48. |
|
#6
|
|||
|
|||
|
спасибо, а что делать с полноэкранными приложениями? при скрытии они сворачиваются, а потом только скрываются.. а то оно мерцает и все..
|
|
#7
|
||||
|
||||
|
обычно полноэкранные приложения имет стил "по верх всех окон", может из-за этого и появляется данная проблема.
попробуйте сделать так: Код:
var EStyle: DWORD; begin EStyle:= GetWindowLong(Handle, GWL_EXSTYLE); SetWindowLong(Handle, GWL_EXSTYLE, EStyle or WS_EX_TOPMOST); |