(Win Api) Проверьте, есть ли на панели задач окно внешнего приложения - PullRequest
0 голосов
/ 27 июня 2009

Я хотел бы знать, возможно ли узнать, есть ли у внешнего приложения окно, отображаемое на панели задач. У меня есть программа, которая иногда показывает сообщение об ошибке, и оно появляется на панели задач. Если я «закрою» сообщение, оно станет невидимым, но из того, что я видел, оно все еще существует. Поэтому единственный способ узнать, является ли это окно видимым и, следовательно, «активным», - это проверить, отображается ли оно на панели задач или нет.

Как я могу это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 июля 2009

Документированным COM-интерфейсом для управления панелью задач является ITaskbarList, но он позволяет только добавлять / удалять кнопки, вы не можете получить список существующих кнопок.

Итак, у вас есть три варианта:

A) Зайдите в недокументированную страну, найдите панель задач и дочерний элемент управления вкладками или панель инструментов (изменена с 2000 на XP) и посмотрите на недокументированные данные по каждому элементу (IIRC - приложение заказа кнопок панели задач с открытым исходным кодом с эта информация)

B) Проверьте стили интересующего вас окна (WS_VISIBLE и (без владельца или WS_EX_APPWINDOW), а не WS_EX_TOOLWINDOW) или что-то в этом духе

C) Крюк / подкласс сломанного приложения

0 голосов
/ 28 июня 2009

Сначала используйте spy ++ (поставляется с visual studio), чтобы узнать имя класса, имя окна и иерархию окон. Подсказка: когда сообщение об ошибке появляется на экране, запустите spy ++, нажмите Alt + F3, затем Alt + D, затем поместите инструмент поиска в окно сообщения об ошибке, затем нажмите OK.

, если окно верхнего уровня (т.е. его родитель является рабочим столом), тогда используйте FindWindow API .

если окно не верхнего уровня (то есть его родитель является другим окном), то сначала используйте FindWindow, чтобы найти главное окно, затем используйте FindWindowEx (возможно, рекурсивно), чтобы найти это окно сообщения об ошибке.

...