比来有个需求,将同一个措施运行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窗口打点命令行工具