Como transformar um arquivo em lote em um alternador de tarefas?
Com arquivos em lote do Windows XP e Windows 7...
O arquivo em lote é:
cls
@echo off
echo 1
start /normal c:\windows\system32\taskmgr.exe
echo 2
pause
O problema é que o foco permanece no Gerenciador de Tarefas.
O problema é que o foco não está na janela do lote.
Como voltar o foco para a janela do arquivo em lote?
Como mudar tarefas para lote?
Como obter o foco na janela do lote usando comandos de arquivo em lote e sem usar o mouse para clicar na janela do arquivo em lote e sem pressionar Alt-Tab no teclado?
Responder1
Inicie o programa minimizado
Para evitar que um programa iniciado a partir de um arquivo em lote (ou prompt de comando) receba o foco, inicie-o minimizado:
start /min /normal c:\windows\system32\taskmgr.exe
Isso abre o programa, mas como a janela está minimizada, ela não consegue tirar o foco.
EDITAR:Iniciar o Gerenciador de Tarefas é um caso especial. Independentemente de como você inicia este programa, elesempreleva o foco do sistema.
Neste caso, não há nada que você possa fazer. Simplesmente não é possível recuperar o foco do sistema a partir de um arquivo em lote. (Lembre-se de que os scripts em lote vêm da época em que não havia nenhuma janela de aplicativo!)
Responder2
Você pode simplesmente criar umvariável de carimbo de data/hora exclusivano script em lote e use essa variável para definir como o valor de seutítulopor cada execução do script.
Você pode então usarativação do aplicativopassando o valor da janela cmdtítulopara ativar, crie um VBScript dinâmico com o valor e, em seguida, execute esse script comscriptpara ativá-lo.
Eu apenas usei ping -n 06 127.0.0.1 > nul
uma pausa de 5 segundos para esperar depois do tempoGerenciador de tarefasé iniciado antes que a janela intitulada do script em lote real seja ativada porscriptexecução.
Script em lote
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
Recursos adicionais
Responder3
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
Isso vai:
- Eco 1
- Abra o Gerenciador de Tarefas
- Aguarde o início do Gerenciador de Tarefas (1s)
- Crie, execute e exclua um script VBS para Alt + Tab de volta ao cmd-window
- Eco 2
- Pausa
Responder4
Em um arquivo em lote, isso funcionou, testado algumas vezes, ok.
Reiniciei o computador e ainda testei ok.
C:\WINDOWS\nircmd.exe sendkeypress rwin+home
NirCmd v2.81 (versão do console)
http://www.nirsoft.net
O comando em lote acima altera o foco do sistema
do "Gerenciador de Tarefas do Windows"
e coloca o foco do sistema
na janela do arquivo em lote.
Plano de fundo:
executou o lote que
chama taskmgr.exe e
o lote executa o comando acima e
agora pressionar Ctrl-C interrompe o lote.
Não há necessidade de clicar com o mouse na janela do lote.
Não há necessidade de Alt-Tab para a janela do lote.
O comando de arquivo em lote acima, de uma linha, altera o foco do sistema.
Desvantagem nircmd.exe é um software de terceiros
em vez de uma solução pronta para uso.
Referência
Faça com que um arquivo em lote minimize todas as janelas, exceto ele mesmo, OU ative algo que possa
--