| 
| 
 | Вопрос # 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 функцию. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |