1

Как сделать пакетный файл переключателем задач?

С Windows XP и Windows 7 пакетных файлов ...
Пакетный файл:

cls  
@echo off  
echo 1  
start /normal c:\windows\system32\taskmgr.exe  
echo 2  
pause 

Проблема в том, что фокус остается на диспетчере задач.
Проблема в том, что фокус не на пакетном окне.

Как вернуть фокус в окно командного файла?
Как переключать задачи в пакетный режим?

Как получить фокус на окне пакетного файла, используя команды пакетного файла и не используя мышь для щелчка по окну пакетного файла и не нажимая Alt-Tab на клавиатуре?

4 ответа4

2

Запустите программу свернутой

Чтобы программа, запущенная из пакетного файла (или из командной строки), не фокусировалась, запустите ее свернутым образом:

start /min /normal c:\windows\system32\taskmgr.exe

Это открывает программу, но, поскольку окно свернуто, оно не может получить фокус.


РЕДАКТИРОВАТЬ: Запуск диспетчера задач является особым случаем. Независимо от того, как вы запускаете эту программу, она всегда фокусируется на системе.

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

1

Вы можете просто создать уникальную переменную отметки времени в пакетном сценарии и использовать эту переменную, чтобы установить в качестве значения ее заголовка для каждого выполнения сценария.

Затем вы можете использовать appactivate, передав ему значение заголовка окна 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 

Дополнительные ресурсы

1
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
  • Пауза
0

В пакетном файле это сделано, проверено несколько раз в порядке.
Перезагрузил компьютер и все еще тестировал нормально.

C:\WINDOWS\nircmd.exe sendkeypress rwin+home

NirCmd v2.81 (консольная версия)
http://www.nirsoft.net

Выше пакетная команда меняет фокус системы
из "Диспетчера задач Windows"
и ставит фокус системы
в окно командного файла.

Фон:
Побежал
вызывает taskmgr.exe и
партия делает вышеупомянутую команду и
теперь нажатие Ctrl-C останавливает пакет.

Нет необходимости щелкать мышью в окне пакета.
Не нужно нажимать Alt-Tab в окне пакета.

Выше, одна команда командного файла одной строки меняет фокус системы.

Недостаток nircmd.exe - стороннее программное обеспечение
по сравнению с готовым решением.

Ссылка
Иметь пакетный файл свернуть все окна, но сам ИЛИ активировать то, что может

-

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .