Cmdow-一個win32窗口管理命令行工具
最近有個需求,將同一個程序運行8個實例,並按照規則在兩個窗口上分布,本以為用bat就可以實現,結果發現沒那麽容易,搜了很久找到了這個工具cmdow.exe,發現這個東西真不錯。
符合了我們項目的需求:單文件,離線可用,免安裝,非常省心。
直接bat裏調用,可以實現很多功能,但是我們這次的需求用bat實現還比較難(bat的for循環裏的賦值結合運算很難搞),於是就結合C#實現了。
簡易入門教程
第一部分
cmdow : 顯示所有進程
cmdow /t : 顯示所有在任務欄上的進程
cmdow /t /p:顯示所有任務欄上的進程並顯示其窗口位置和大小
第二部分
CMDOW /TH | /TV | /CW | /MA | /UW | /AT | /FS | /WM
這幾個都是分布窗口的命令,針對所有窗口的,具體參見官方文檔
第三部分
CMDOW window {[/ACT] [/INA] [/ENA] [/DIS] [/VIS] [/HID] [/MIN] [/MAX] [/RES]} CMDOW window {[/REN newcaption] [/TOP] [/NOT] [/MOV left top] [/SIZ width height] [/CLS] [/END]}
針對具體某一個窗口的操作,只介紹一下我用到的:
首先,怎麽確定是哪個窗口?
通過cmdow /t ,可以看到進程的 Handle(第一列)以及Caption(最後一列)
使用 Handle 或者 Caption 都可以指定具體的窗口,但是建議使用Handle,因為是唯一的(Caption可能存在一樣的,例如上圖中的“UE4_Program (64-bit, PCD3D_SM5)"就有兩個實例)
例如設置上圖中UE4_Program (64-bit, PCD3D_SM5)的窗口大小和位置:
cmdow 0x080A30 /siz 500 500
cmdow 0x080A30 /mov 0 0
這種方法可以具體設置到某個實例。
或者:
cmdow "UE4_Program (64-bit, PCD3D_SM5)" /siz 500 500
cmdow "UE4_Program (64-bit, PCD3D_SM5)" /mov 0 0
這種方法只能模糊查找,在兩個UE4的進程中選一個進行設置,註意,因為Caption中含有空格,所以名字要用引號包含起來。
第四部分
其他命令舉例:
/hid可以將進程隱藏,任務欄和系統托盤裏都看不到(難怪cmdow容易被殺毒軟件殺掉,這容易偷偷幹壞事)
/cls將任務關閉
第五部分
此外使用cmdow還可以啟動進程, 格式如下:
CMDOW /RUN [state] file [args]
其中 state 可以是這三個參數中的一個: /MAX /MIN /HID,分別是最大化,最小化以及隱藏
file就是要執行的可執行文件,如果名稱中包含空格,一樣要用雙引號包裹。 args就是可執行文件的其他參數(程序自己定義的)
第六部分
官方的幾個使用案例:
關閉所有任務欄上的進程:
@echo off
:: Hide this console window so its not shown on taskbar
cmdow @ /hid
for /f %%a in (‘cmdow /t‘) do cmdow %%a /cls
:: Now close this console window
cmdow @ /cls
輸出當前屏幕的尺寸:(level是0的進程是個特殊進程,能通過他獲得當前屏幕分辨率)
@echo off
for /f "tokens=2,10-11" %%a in (‘cmdow /p‘) do (
if "%%a"=="0" set "WIDTH=%%b" & set "HEIGHT=%%c"
)
echo Resolution is %WIDTH%x%HEIGHT%
根據官方的案例,我們也可很容易寫出這樣的功能:
例如,設置所有名稱為RAS_General的進程的窗口大小為800*800,並把窗口位置移動到0,0 點:
@echo off
for /f "tokens=1,9" %%a in (‘cmdow /t‘) do(
if "%%b"=="RAS_General" (
cmdow %%a /siz 800 800
cmdow %%a /mov 0 0
)
)
Cmdow-一個win32窗口管理命令行工具