Главная страница
    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.011 c
3-1122378297
rayrom
2005-07-26 15:44
2005.09.11
Необходимо сократить или оптимизировать запрос!


14-1124089417
Petrovski
2005-08-15 11:03
2005.09.11
Развод на международном уровне?


1-1124348932
Juice
2005-08-18 11:08
2005.09.11
Сохранение published-свойств


14-1124106658
inic
2005-08-15 15:50
2005.09.11
Почти опрос. Какой музыкальный редактор вы бы посоветовали ?


14-1123495177
WondeRu
2005-08-08 13:59
2005.09.11
Только узнал, что Longhorn переименовали в Vista ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский