发现这个东西真不错

时间:2022-02-16 08:26:20

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