Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

Как узнать: окно поверх других или нет, если есть хендел?   Найти похожие ветки 

 
lox   (2005-08-16 18:23) [0]

Как узнать: окно поверх других или нет, если есть хендел?
Помогите плиз.


 
Юрий Зотов ©   (2005-08-16 19:25) [1]

Навскидку пришло в голову.

1. Получаем прямоугольник своего окна (GetWindowRect).
2. Перебираем окна (EnumWindows).
3. Для каждого окна тоже получаем его прямоугольник.
4. Находим общий прямоугольник (IntersectRect).
5. Если он не пустой, то берем точку в его центре и вызываем WindowFromPoint. Если получен хэндл не нашего окна - то наше окно снизу, цикл можно заканчивать.

Недостаток - способ не сработает для задизабленных окон.


 
Eraser ©   (2005-08-16 19:34) [2]

lox   (16.08.05 18:23)

Можно использовать ф-ю GetNextWindow. Тут уж можно наваять несколько алгоритмов.


 
lox   (2005-08-16 20:01) [3]

А готовый решений нет?
решение Юрия Зотова неподходит, так как моё окно примерно 5-10 пикселей на экране.


 
Eraser ©   (2005-08-16 20:05) [4]

lox   (16.08.05 20:01) [3]

Алгоритм на основе GetNextWindow займёт 10-15 строк кода.


 
Юрий Зотов ©   (2005-08-16 20:13) [5]

> Eraser ©   (16.08.05 20:05) [4]

GetWindow/GetNextWindow - это было первое, о чем я подумал. Но в данном случае это решение не прокатывает, потому что окно может быть и не первым в Z-порядке, но, тем не менее, будет полностью видимым (то есть, не закрытым другими окнами).

Иначе вопрос решался бы вообще элементарно, в 1 строку:
if GetForegroundWindow <> Handle then ... // мы не сверху


 
Eraser ©   (2005-08-16 20:23) [6]

Юрий Зотов ©   (16.08.05 20:13) [5]
Иначе вопрос решался бы вообще элементарно, в 1 строку:


Так и то верно!
А может автор вообще имел ввиду "Имеет ли окно флаг WS_EX_TOPMOST"...
В общем случае подойдёт GetForegroundWindow думаю...


 
Юрий Зотов ©   (2005-08-16 20:23) [7]

> lox   (16.08.05 20:01) [3]

Если окно такое маленькое, то вызов GetWindowRect, а потом 4 вызова GetWindowFromPoint (для каждого угла) решают задачу с вероятностью примерно пять девяток.


 
lox   (2005-08-17 08:53) [8]

А если я имел ввиду WS_EX_TOPMOST, то как можно сделать?
Опишу поподробнее: моя прога 5-10 пикселей висит ссамого верху экрана, когда на неё наводишь курсор вылетает меню. Трабла в том что моя прога висит выше всех приложений(даже игр и плееров), так вот надо сделать так чтобы когда открыт плеер или игра придать моему окну свойство нормальное.
Я почти всё реализовл, но надо определить что какоето окно имеет свойство "поверх всех"


 
Думкин ©   (2005-08-17 09:07) [9]

Так.... какое-то? Не обязательно ваше? ответ дан. Читаем ветку.


 
Игорь Шевченко ©   (2005-08-17 10:15) [10]


> Как узнать: окно поверх других или нет, если есть хендел?


(GetWindowLong (Handle, GWL_EXSTYLE) and WS_EX_TOPMOST) <> 0


 
lox   (2005-08-17 11:16) [11]

Думкин
Точнее не какое-то а активное окно(не моё)


 
Юрий Зотов ©   (2005-08-17 16:16) [12]

http://delphimaster.net/view/4-1124275353/

Постинг [3]. Идем от своего окна наверх по Z-порядку и проверяем IntersectRect. Просто, элегантно, надежно.


 
lox   (2005-08-17 18:14) [13]

Спасибо всем! Я воспользовался советом Игоря Шевченко.


 
Юрий Зотов ©   (2005-08-17 18:57) [14]

> lox   (17.08.05 18:14) [13]

Ничто не мешает окну быть поверх других и без стиля WS_EX_TOPMOST.



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

Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.014 c
6-1116965892
Павел1
2005-05-25 00:18
2005.09.11
Помогите с Socket-ами!


4-1122192428
SergProger
2005-07-24 12:07
2005.09.11
Мой компьютер


14-1124194962
aod_worm
2005-08-16 16:22
2005.09.11
Проблемы с СОМ-устройством. He-e-e-e-e-lp! Горю!


14-1124266807
Андрей Жук
2005-08-17 12:20
2005.09.11
Проблемы с Dual Channel DDR


8-1114430617
Ibrox
2005-04-25 16:03
2005.09.11
RLE компрессия в TGA





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский