Войти

Показать полную графическую версию : перевод фокуса с одной проги на другую


EvgenC
20-12-2020, 20:00
Всем привет! Прошу помощи.
Сам я не программист, домашний пользователь, но простые батники по нужде делать приходится.

Итак, имею батник. Фокус перевожу утилитой nircmd.exe, но она как-то не четко работает. Не пойму, почему...

Задача батника:

1) стартовать процесс BTV.exe с параметром
2) перевести фокус на ранее запущенное окно "Meedio"
3) через 2 секунды передать процессу BTV.exe другие параметры
4) перевести фокус на ранее запущенное окно "Meedio"

Текст батника ниже. При запуске батника открывается cmd.exe, в нем вижу, что первый пункт выполняется, и далее никакого движения, пока не закрою окно cmd.exe крестиком. Т.е. второй и последующие пункты задачи не выполняются. Чего-то тут не хватает.



"C:\Program Files (x86)\BTV\BTV.exe" -tr
nircmd.exe win activate stitle "Meedio"
ping 127.0.0.1 -n 2 >nul
"C:\Program Files (x86)\BTV\BTV.exe" -wu -m:dvbtrd -unmute -vol:170 -ch:1
nircmd.exe win activate stitle "Meedio"


Батник внутри которого только перевод фокуса на окно "Meedio" прекрасно работает, фокус переводит, но как только внутри него нужно еще и процесс запустить/выполнить, то фокус перестает переводиться.
Подскажите, пожалуйста, что нужно дописать, чтоб заработало?

Iska
20-12-2020, 22:02
При запуске батника открывается cmd.exe, в нем вижу, что первый пункт выполняется, и далее никакого движения, пока не закрою окно cmd.exe крестиком. Т.е. второй и последующие пункты задачи не выполняются. Чего-то тут не хватает. »
Что такое BTV.exe? Что за приложение с заголовком «Meedio»?

Если хотите экспериментировать сами, то вот:
start "" "%ProgramFiles(x86)%\BTV\BTV.exe" -tr
nircmd.exe win activate stitle "Meedio"
nircmd.exe wait 2000
start "" "%ProgramFiles(x86)%\BTV\BTV.exe" -wu -m:dvbtrd -unmute -vol:170 -ch:1
nircmd.exe win activate stitle "Meedio"

И да: «win activate» — это не «перевод фокуса». Для установки фокуса есть другая команда:
focus: Set the focus to the specified window.

evgenc2
23-12-2020, 17:39
Iska, пришлось создать новый аккаунт, т.к. старый почему-то не позволяет отвечать на форуме...

Немного не правильно описал задачу: нужно и фокус перевести на «Meedio» и сделать его поверх всех окон.

BTV.exe - программа управления платой ТВ-тюнера. Задача батника запустить эту программу и настроить ее на заданный FM-радиоканал или DVB-радиоканал с заданным уровнем громкости.

«Meedio» - мультимедийная оболочка, из под которой управляется компьютер с помощью ПДУ. Она развернута на весь экран.


С помощью утилиты nircmd.exe было выяснено, что окно этой оболочки имеет заголовок, в котором есть слово «Meedio». На него я и настроил команду "win activate stitle".
И она прекрасно работает, как раз так, как мне надо: если фокус сбивается или что-то вылезло поверх оболочки, то нажимая спец.кнопку на ПДУ, запускается батник с "nircmd.exe win activate stitle "Meedio"" и оболочка опять поддается контролю с ПДУ.

Но когда я эту команду прописал так, как в батнике выше (т.е. после запуска BTV.exe ), то фокус на оболочку не переводится и прога BTV.exe остается в фокусе и поверх окна оболочки.

Команда "focus" - тоже не дает желаемого результата...

Iska
24-12-2020, 00:02
evgenc2, тогда вовсе непонятно, зачем Вам промежуточное «win activate stitle "Meedio"»?

evgenc2
24-12-2020, 20:37
Промежуточное - это чтобы ничего не маячило поверх оболочки.

И похоже я нашел, почему не работало... Команды nircmd.exe обрабатываются очень быстро. А прога BTV.exe запускается некоторое время. И к моменту запуска BTV.exe фокус остается на ней, а nircmd.exe уже давно отработал. Выход: прописать команду nircmd.exe несколько раз подряд. Десять штук подряд хватило.

Так что можно считать, что проблема решена. Осталось понаблюдать некоторое время.

Iska
24-12-2020, 21:56
evgenc2, тогда лучше задействовать AutoIt с его WinWait*.

evgenc2
26-12-2020, 23:04
Спасибо, Iska, если вылезут проблемы с описанным способом решения задачи, то придется изучать возможности AutoIt.

Iska
26-12-2020, 23:29
evgenc2, не «если», а «когда» ;).




© OSzone.net 2001-2012