![]() |
|
|
#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; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |
#4
|
|||
|
|||
![]() Цитата:
я понимаю что SW_HIDE, я несовсем знаю sendmessage.. SendMessage(hand_le, {тут?}, {тут?}, {тут?}); гдето SW_HIDE, понятно, и где? и что в остальных параметрах? |
#5
|
||||
|
||||
![]() Цитата:
Код:
ShowWindow(Handle, SW_HIDE); Код:
SendMessage(Handle, WM_SHOWWINDOW, SW_HIDE, sw_ParentClosing); Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. Последний раз редактировалось 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); Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |