如何使批处理文件成为任务切换器?
使用 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,然后使用以下代码执行该脚本脚本来激活它。
我只是用ping -n 06 127.0.0.1 > nul
5 秒钟的暂停来等待时间任务管理器在实际的批处理脚本标题窗口被激活之前启动脚本执行。
批处理脚本
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 是第三方软件,
而不是开箱即用的解决方案。
参考
使用批处理文件最小化所有窗口,只保留其自身,或者激活一些可以
--