Как сделать пакетный файл переключателем задач?
С пакетными файлами Windows XP и Windows 7...
Пакетный файл выглядит следующим образом:
cls
@echo off
echo 1
start /normal c:\windows\system32\taskmgr.exe
echo 2
pause
Проблема в том, что фокус остается на диспетчере задач.
Проблема в том, что фокус не на пакетном окне.
Как вернуть фокус на окно пакетного файла?
Как переключить задачи на пакет?
Как переключить фокус на окно пакетного файла, используя команды пакетного файла, не щелкая мышью по окну пакетного файла и не нажимая Alt-Tab на клавиатуре?
решение1
Запустите программу в свернутом виде
Чтобы программа, запущенная из пакетного файла (или командной строки), не перехватывала фокус, запустите ее в свернутом виде:
start /min /normal c:\windows\system32\taskmgr.exe
Это открывает программу, но поскольку окно свернуто, оно не может получить фокус.
РЕДАКТИРОВАТЬ:Запуск диспетчера задач — это особый случай. Независимо от того, как вы запустите эту программу, онавсегдапринимает системный фокус.
В этом случае вы ничего не можете сделать. Просто невозможно вернуть системный фокус из пакетного файла. (Помните, пакетные скрипты появились в те времена, когда окон приложений вообще не было!)
решение2
Вы можете просто создатьуникальная переменная метки временив пакетном скрипте и используйте эту переменную для установки в качестве значениязаголовокза каждое выполнение скрипта.
Затем вы можете использоватьприложениеактивироватьпередавая ему значение окна cmdзаголовокдля активации создайте динамический VBScript со значением, а затем выполните этот скрипт с помощьюcscriptчтобы активировать его.
Я просто использовал ping -n 06 127.0.0.1 > nul
паузу в 5 секунд, чтобы подождать после того, как времяДиспетчер задачзапускается до того, как активируется окно фактического пакетного скриптаcscriptисполнение.
Пакетный скрипт
cls
SET t=%~n0_%date:~10%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
SET t=%t: =0%
TITLE %t%
@echo off
echo 1
start /normal c:\windows\system32\taskmgr.exe
echo 2
:VBSDynamicBuild
SET TempVBSFile=%temp%\~tmpSendKeysTemp.vbs
IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"
ECHO Set objShell = CreateObject("WScript.Shell") >>"%TempVBSFile%"
ECHO objShell.AppActivate "%t%" >>"%TempVBSFile%"
ping -n 06 127.0.0.1 > nul
CSCRIPT //nologo "%TempVBSFile%"
pause
Дополнительные ресурсы
решение3
cls
@echo off
echo 1
start /normal c:\windows\system32\taskmgr.exe
REM Wait for Task Manager to open
CALL :Wait 1
REM Alt+Tab back to cmd window
CALL :AltTab
echo 2
pause
GOTO :eof
REM Subroutines:
:wait
@CHOICE /D Y /T:%1% > NUL
EXIT /B
:AltTab
(
ECHO.CreateObject^("WScript.Shell"^).SendKeys "%%{TAB}"
)>%tmp%\tmp.vbs
CALL %tmp%\tmp.vbs
DEL %tmp%\tmp.vbs
EXIT /B
Это будет:
- Эхо 1
- Открыть диспетчер задач
- Дождитесь запуска диспетчера задач (1 с)
- Создать, запустить и удалить VBS-скрипт, чтобы Alt+Tab вернулся в cmd-окно
- Эхо 2
- Пауза
решение4
В пакетном файле это сработало, протестировал несколько раз, все нормально.
Перезагрузил компьютер, все еще тестируется.
C:\WINDOWS\nircmd.exe sendkeypress rwin+home
NirCmd v2.81 (Консольная версия)
http://www.nirsoft.net
Приведенная выше пакетная команда изменяет системный фокус с
«Диспетчера задач Windows» на окно пакетного файла.
Предыстория:
Запущен пакет, который
вызывает taskmgr.exe, и
пакет выполняет указанную выше команду, и
теперь нажатие Ctrl-C останавливает пакет.
Не нужно щелкать мышкой по окну пакета.
Не нужно нажимать Alt-Tab для перехода к окну пакета.
Приведенная выше однострочная команда пакетного файла изменяет фокус системы.
Недостаток nircmd.exe — это стороннее программное обеспечение
по сравнению с готовым решением.
Ссылка
Заставьте пакетный файл свернуть все окна, кроме себя самого, ИЛИ активировать что-то, что может
--