Форум 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 нема :cry: ....

Прошелся утилитой 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.
Хотя и старое придется поддерживать для обратной совместимости с предыдущими версиями :cry: ....

Страница 1 из 1 Часовой пояс: UTC + 3 часа