|
Вопрос # 2 397/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
При использовании EnumWindows столкнулся со следующей "особенностью" функции: при запуске DOS приложения в полноэкранном режиме, функция EnumWindows не видит окна этого приложения. FindWindow при этом находит данное окно. Если запустить DOS приложение в оконном режиме, то EnumWindows видит это окно. Я понимаю, что DOS приложения - это анахронизм, но они еще используются. Пытался найти объяснение такому поведению в google, но ничего похожего не встретил. Может кто знает, что это за глюк? Система - WinXP, Вудзрш 2007
Примечание #1 (5 февраля 2009, 17:43): Вудзрш - это Delphi :-)
 |
Вопрос задал: Мережников Андрей (статус: Абитуриент)
Вопрос отправлен: 5 февраля 2009, 17:42
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Паровоз
Здравствуйте, Мережников Андрей!
У меня также WindowsXP, Delphi 7. Запустил EnumWindows с callback функцией без фильтрации. Список пишется в файл с интервалом 5 сек. Полноэкранное консольное окно в списке присутствует постоянно.
 |
Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 5 февраля 2009, 23:25
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 7 февраля 2009, 23:12; участников в обсуждении: 4.
|
Вадим К (статус: Академик), 5 февраля 2009, 17:49 [#1]:
А не пробовали присмотреться внимательней, по моему, если я помню точно, то там меняеться заголовок окна. И понятное дело, что найти его уже нельзя.
Попробуйте составить список окон до и после разворачивания (второй захват списка можно по таймеру сделать) и сравните.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 5 февраля 2009, 18:26 [#2]:
я и делал по таймеру, там не только заголовка окна нет, но и класс окна не определяется в полноэкранном режиме ConsoleWindowClass, а FindWindow(nil,nil) находит и это окно.
EnumWindows - не ищет же конкретное окно, а перебирает все открытые с вызовом Callback функции, в которой я определял заголовок и имя класса найденного окна (GetWindowText и GetClassName соответственно).
Вся фишка в том, что FindWindow НАХОДИТ, а EnumWindows - НЕТ, хотя, по определению, EnumWindows должен видеть все окна.
|
|
Amidamaru (статус: 4-ый класс), 5 февраля 2009, 22:04 [#3]:
EnumWindows НЕ ДОЛЖЕН видеть все окна.
Он перебирает только окна высшего уровня.
Возможно в момент разворачивания окно остаётся существовать, но перестает являться окном высшего уровня.
|
|
Паровоз (статус: 10-ый класс), 5 февраля 2009, 22:26 [#4]:
"Возможно в момент разворачивания окно остаётся существовать, но перестает являться окном высшего уровня"
Это что-то из рода фантастики.
|
|
Мережников Андрей (статус: Абитуриент), 7 февраля 2009, 21:34 [#5]:
to Паровоз: Сами как оцениваете свой ответ?
|
|
Паровоз (статус: 10-ый класс), 7 февраля 2009, 22:26 [#6]:
"Сами как оцениваете свой ответ?"
А никак. И зачем его оценивать вообще - разве это обязательно?
Вопрос был о глюке и мой ответ означает только то, что на моей машине никаких глюков нет.
|
|
Паровоз (статус: 10-ый класс), 7 февраля 2009, 23:12 [#7]:
PS: А вообще, конечно, хотелось бы взглянуть на callback функцию.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|