Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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

Amidamaru (статус: 4-ый класс), 5 февраля 2009, 22:04 [#3]:

EnumWindows НЕ ДОЛЖЕН видеть все окна.
Он перебирает только окна высшего уровня.
Возможно в момент разворачивания окно остаётся существовать, но перестает являться окном высшего уровня.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Паровоз

Паровоз (статус: 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 функцию.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.03 сек.