Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Как перечислить все окна над моим?   Найти похожие ветки 

 
Dmk ©   (2003-06-01 01:28) [0]

Вот мой код, но какое то одно окно из эксплорера обрабатывается :(

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 перечисляемых окон?


 
Song ©   (2003-06-01 10:43) [1]

Мне вот чего понравилось

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;


 
Dmk ©   (2003-06-01 11:57) [2]

Song © (01.06.03 10:43)
Понятно. Только если первое окно полностью находится
за вторым окном, то IsWindowVisible возвращает false,
ну а ежели из-за первого окна торчит хоть кусочек второго,
то - True. Ну а в стиле, в обоих случаях WS_VISIBLE остается.
Если убрать IsWindowVisible, то условие со стилями выполняется
для окна, которое фактически не видно (полностью перекрыто
первым)! И еще. Если убрать WS_VISIBLE, то перечисляются
все спрятанные окна, что мне совсем не нужно.


 
Dmk ©   (2003-06-08 00:37) [3]

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! Вот так работает :)



Страницы: 1 вся ветка

Текущий архив: 2003.08.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
14-20813
AlexG
2003-07-21 14:20
2003.08.07
Процедура изменения состояния.


3-20449
Andrey V.
2003-07-17 12:58
2003.08.07
IB на 2-х процессорном сервере


3-20440
DBDev
2003-07-17 12:13
2003.08.07
Кто-нибудь создавал ODBC алиасы программно?


1-20579
andrey__
2003-07-16 13:41
2003.08.07
ServiceApplicetion вызывающая приложение (не видна форма)


7-20827
h-sargis
2003-05-27 20:30
2003.08.07
Как создать программудля редактирования параметров реестра