Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   перевод фокуса с одной проги на другую (http://forum.oszone.net/showthread.php?t=347399)

EvgenC 20-12-2020 20:00 2943590

перевод фокуса с одной проги на другую
 
Всем привет! Прошу помощи.
Сам я не программист, домашний пользователь, но простые батники по нужде делать приходится.

Итак, имею батник. Фокус перевожу утилитой 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 2943597

Цитата:

Цитата EvgenC
При запуске батника открывается 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 2943958

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 2944002

evgenc2, тогда вовсе непонятно, зачем Вам промежуточное «win activate stitle "Meedio"»?

evgenc2 24-12-2020 20:37 2944094

Промежуточное - это чтобы ничего не маячило поверх оболочки.

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

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

Iska 24-12-2020 21:56 2944105

evgenc2, тогда лучше задействовать AutoIt с его WinWait*.

evgenc2 26-12-2020 23:04 2944280

Спасибо, Iska, если вылезут проблемы с описанным способом решения задачи, то придется изучать возможности AutoIt.

Iska 26-12-2020 23:29 2944283

evgenc2, не «если», а «когда» ;).


Время: 19:16.

Время: 19:16.
© OSzone.net 2001-