Главная страница
    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.013 c
1-1124696985
_Landgraf_
2005-08-22 11:49
2005.09.11
Использование RichEdit


1-1124537570
Агент Х-СОМ
2005-08-20 15:32
2005.09.11
отладка компонентов


10-1101905039
grigory
2004-12-01 15:43
2005.09.11
Как правильно получить доступ к св-ву GetProp?


3-1122900580
Cheaterr
2005-08-01 16:49
2005.09.11
Короткий вопрос по Access


14-1124245340
Думкин
2005-08-17 06:22
2005.09.11
17 августа. С днем рождения.





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