![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перечислить все окна над моим? [D6, Win2k, WinXP]
Dmk © (2003-06-01 01:28:00)Вот мой код, но какое то одно окно из эксплорера обрабатывается :(
WS_EX_TOOLWINDOW специально для ICQ
function EnumTopWindowsProc (WindowHandle : HWND; Data : Pointer) : Bool; stdcall;
var
WinStyle, ExStyle : LongInt;
begin
Result := true;
WinStyle := GetWindowLong(WindowHandle, GWL_STYLE);
ExStyle := GetWindowLong(WindowHandle, GWL_EXSTYLE);
If IsWindowVisible(WindowHandle) then
begin
if ((ExStyle and WS_EX_TOPMOST) <> 0) and
((ExStyle and WS_EX_TOOLWINDOW) <> 0) and
((WinStyle and WS_VISIBLE) <> 0) then
begin
//Some action
end;
end;
end;
Как перечислить все окна над моим или как получить Z-Order перечисляемых окон?
Dmk (2003-06-08 00:37:00) [1]function EnumTopWindowsProc (WindowHandle : HWND; Data : Pointer) : Bool; stdcall;
var
WinStyle, ExStyle : Cardinal;
Function ResultFromStyle(WindowStyle, ExWindowStyle:Cardinal): boolean;
var
r1, r2: boolean;
begin
r1 := ((ExWindowStyle and WS_EX_TOPMOST) <> 0) and
((ExWindowStyle and WS_EX_TOOLWINDOW) <> 0) and
((WindowStyle and WS_VISIBLE) <> 0);
r2 := ((ExWindowStyle and WS_EX_TOPMOST) <> 0) and
((WindowStyle and WS_VISIBLE) <> 0);
Result := r1 or r2;
end;
begin
Result := true;
WinStyle := GetWindowLong(WindowHandle, GWL_STYLE);
ExStyle := GetWindowLong(WindowHandle, GWL_EXSTYLE);
If IsWindowVisible(WindowHandle) then
begin
if ResultFromStyle(WinStyle, ExStyle) then
begin
//Some action
end;
end;
end;
XeXe! Вот так работает :)
Dmk (2003-06-01 11:57:00) [2]Song © (01.06.03 10:43)
Понятно. Только если первое окно полностью находится
за вторым окном, то IsWindowVisible возвращает false,
ну а ежели из-за первого окна торчит хоть кусочек второго,
то - True. Ну а в стиле, в обоих случаях WS_VISIBLE остается.
Если убрать IsWindowVisible, то условие со стилями выполняется
для окна, которое фактически не видно (полностью перекрыто
первым)! И еще. Если убрать WS_VISIBLE, то перечисляются
все спрятанные окна, что мне совсем не нужно.
Song (2003-06-01 10:43:00) [3]Мне вот чего понравилось
If IsWindowVisible(WindowHandle) then
begin
if ((ExStyle and WS_EX_TOPMOST) <> 0) and
((ExStyle and WS_EX_TOOLWINDOW) <> 0) and
(( WinStyle and WS_VISIBLE) <> 0) then
begin
//Some action
end;