Форум Beholder http://beholder.ru/bb/ | |
Поиск окон ПО v5.17+ http://beholder.ru/bb/viewtopic.php?f=10&t=11984 |
Страница 1 из 1 |
Автор: | hd44780 [ 12 фев 2011, 12:33 ] |
Заголовок сообщения: | Поиск окон ПО v5.17+ |
Команда HWND hBhWnd = FindWindow ("TMain", "BeholdTV"); находит ПО, но какое? Если у меня их 2, как мне понять которое из них я нашел? Каким тюнером я буду рулить? Вот запустил 2 экземпляра. Наклепал программку поиска окна (могу положить исходник на C#, .NET2.0). Нашел: Window found Window Name: 'Behold TV - Channel 41 (591,25 МГц)' Parsing ... Информация: 'Channel 41 (591,25 МГц)' Канал: 'Channel 41' Частота (строка), МГц/DVB transponder: 591,25 МГц Частота, Гц: 591250000 Это у меня 609 тюнер. А X7 нема ![]() Прошелся утилитой Spy++, нашел окна типа "BeholdTV.Inst0", но как-то некошерно искать их прямым перебором. Да и ненадежно это. Мало ли какой хлам, не относящийся к ПО Behold я так найду... Спасибо. |
Автор: | EugeneF [ 12 фев 2011, 14:01 ] |
Заголовок сообщения: | |
Ну по идее, рулить надо активным тюнером. Вы же не собираетесь два одновременно смотреть или слушать... ![]() Хотя конечно да, в название окна тоже не помешало бы вставить профиль или название тюнера... |
Автор: | hd44780 [ 13 фев 2011, 11:29 ] |
Заголовок сообщения: | |
писал(а): Ну по идее, рулить надо активным тюнером.
Все равно непонятно, которым? FindWindow всегда находит только одно окно. Я могу поисследовать набор окон в винде, насочинять какой-то алгоритм (искать окна "BeholdTV.Inst0", но те ли это окна?), м.б. он будет как-то работать, но хотелось бы услышать рекомендации разработчиков ПО. Ведь тот же Агент как-то их различает? Или просто запускает с ключом -inst и все? |
Автор: | EugeneF [ 13 фев 2011, 13:25 ] |
Заголовок сообщения: | |
Скрее всего именно FindWindow ("TMain", "BeholdTV.inst0") это оно и есть. Поскольку это окно панели, которое в дефолтном инстансе называется просто BeholdTV. Т.е., раньше именно ему и посылали. А активное окно действительно искать сложно, поскольку активным может быть либо панель, либо экран, в зависимости от режима... |
Автор: | hd44780 [ 14 фев 2011, 10:45 ] |
Заголовок сообщения: | |
Угу ![]() Ни фига не понять ... Активное окно - оно ж сейчас одно, через секунду пользователь поменял, оно уже другое. Но хэндлы ж от этого не меняются, они одинаковые в течение всего времени жизни приложения. Я прямым перебором в плагине могу найти окна: BeholdTV BeholdTV.inst0 BeholdTV.inst1 .............. Но в котором из них работает плагин? Тут по-моему надо какое-то расширенное API. Или по аргументу HINSTANCE hModule в DllMain как-то искать окна, принадлежащие приложению. И среди них уже с текстом "BeholdTV.inst1". Надо об этом подумать. Раньше как-то не сталкивался. Хотя где-то читал, что HINSTANCE у всех одинаковый.... На фига он тогда нужен? Разработчики, Ау-у... |
Автор: | Support [ 14 фев 2011, 13:47 ] |
Заголовок сообщения: | |
Узнать инстанс приложения можно, проанализировав ключи командной строки, которую возвращает, например, ф-я GetCommandLine(). Названия окон инстансов приложения: Окно "TMain" - "BeholdTV.InstX" Окно "TVideoFrame" - "Video window.InstX" где X - номер инстанса. Пока так. В новом расширенном API будут отдельные вызовы для получения номера инстанса, хендлов окон приложения и пр. полезной информации. |
Автор: | hd44780 [ 14 фев 2011, 14:07 ] |
Заголовок сообщения: | |
Support, спасибо. Попробую. С нетерпением жду нового API. Хотя и старое придется поддерживать для обратной совместимости с предыдущими версиями ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |