如何使批次檔成為任務切換器?
對於 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 是第三方軟體的缺點。
參考
有一個批次檔最小化除本身之外的所有視窗或激活可以的東西
--