![]() |
eXeL@B —› Программирование —› EnumWindows + SendMessage(WM_CLOSE...) = не работает |
Посл.ответ | Сообщение |
|
Создано: 05 мая 2009 21:52 · Личное сообщение · #1 Эта тема уже есть на WASM'е. Вчера тренировался по работе с GUI и сообщениями в VC 6 - решил написать программку, посылающую сообщения нужным окнам. Эта программа перечисляет верхние окна функцией EnumWindows, а callback-функция записывает полученный HWND в динамический массив, попутно увеличивая его размер по мере необходимости. В дальнейшем все HWND берутся только из этого массива. Потом интерфейс программы получает адрес этого массива и добавляет в ListBox заголовки этих окон пока в массиве не встретится NULL. В результате ListBox наполнен заголовками текущих Top-окон в системе. При выборе элемента списка в один из Edit'ов записывается HWND, взятый из массива. Кнопка Update обновляет список путем удаления всех элементов из списка и создания динамического массива заново. Кнопка Close посылает выбранному окну сообщение WM_CLOSE. При получении WM_CLOSE окно должно закрыться, но этого не происходит. Путем использования FindWindow выясняется что HWND выбранного окна и его значение в массиве не совпадают, почему окно и не закрывается. ВОПРОС: Почему HWND в массиве уже не совпадает с реальным, хотя если нажать кнопку Update, то значения остаются те же? Сейчас программа работает, но за счет того что используется ф-я FindWindow, а зн-е из массива не берется. А ведь содержимое ListBox'а может изменить любой процесс, поэтому на его содержимое полагаться нельзя! И еще. Замечено изменения поведения программы в релизной и дебагной версии. Хотя во всех используется UNICODE и _UNICODE, при инициализации релизной программы в ListBox'е очень мало содержимого, а если нажать Update, то строк становится больше. Иногда наблюдается повторение каждого заголовка в списке при нажатии на Update. И еще при запущенном Spyxx программа также выводит в LisBox другие значения. Один раз где-то по середине процесса разработки программы она падала при обычном запуске из-за ошибки доступа, а при запущенном Spyxx - нормально запускалась, правда ListBox был полностью пустой. ![]() ![]() |
|
Создано: 05 мая 2009 21:56 · Личное сообщение · #2 |
|
Создано: 06 мая 2009 05:19 · Личное сообщение · #3 AndreyMust19 пишет: ВОПРОС: Почему HWND в массиве уже не совпадает с реальным, хотя если нажать кнопку Update, то значения остаются те же? Всё совпадает. Порядок строк в списке не совпадает с порядком HWND-ов в массиве, потому что в стиле списка стоит автосортировка. LBS_SORT надо убрать. AndreyMust19 пишет: Интересно - что надо сделать чтобы появился диалог выхода из учетной записи? ![]() |
|
Создано: 06 мая 2009 09:35 · Личное сообщение · #4 |
![]() |
eXeL@B —› Программирование —› EnumWindows + SendMessage(WM_CLOSE...) = не работает |
Эта тема закрыта. Ответы больше не принимаются. |