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窗口管理命令行工具的更多相关文章
- Linux 下一个很棒的命令行工具
导读 Taskwarrior 是 Ubuntu/Linux 下一个简单而直接的基于命令行的 TODO 工具.这个开源软件是我曾用过的最简单的基于命令行的工具之一.Taskwarrior 可以帮助你更好 ...
- 如何用node编写命令行工具,附上一个ginit示例,并推荐好用的命令行工具
原文 手把手教你写一个 Node.js CLI 强大的 Node.js 除了能写传统的 Web 应用,其实还有更广泛的用途.微服务.REST API.各种工具……甚至还能开发物联网和桌面应用.Java ...
- 如何创建一个基于命令行工具的跨平台的 NuGet 工具包
命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...
- 【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目
动机 简介 个人评分 动机 一般的框架都有脚手架工具,但是并不会让所有人满意. 简介 cookiecutter1是一个Python实现的命令行工具,可以通过项目模版来构建项目. 它的特性包括: 跨平台 ...
- OpenStack命令行工具与API
Openstack命令行工具 我们推荐Openstack命令行工具和Openstack的Dashboard两者结合使用.一些用户由于使用过其他云技术背景的,可能会使用EC2兼容的API,相对于我们需要 ...
- **代码审查:Phabricator命令行工具Arcanist的基本用法
Phabricator入门手册 http://www.oschina.net/question/191440_125562 Pharicator是FB的代码审查工具,现在我所在的团队也使用它来进行代码 ...
- commanderJs编写命令行工具(cli)
前言: 最近需要做一个内部的node cli来独立构建流程,对整个命令行工具实现流程有了大致了解,下面来解释一下如何实现一个cli,和如何使用 commander 库. 新手误区: 在开始实现之前 ...
- Tools - Windows系统下的命令行工具Cmder
cmder简介 官网:http://cmder.net/ GitHub:https://github.com/cmderdev/cmder Cmder是一个windows下的命令行工具,用来替代win ...
- face_recognition环境配置及命令行工具测试
由于某种不可抗力(又是它!)我写了这篇博客,主要目的是记录. face_recognition是啥子? face_recognition号称世界上最简单的人脸识别库,可使用 Python 和命令行进行 ...
随机推荐
- C盘无损扩容(傻逼拯救者128G固态分两个盘)
下载DiskGenius.exe 进行拆分分区(我从d盘拆分出20G给c盘) 然后右键此电脑,管理->磁盘管理 选中刚分出来的20G空间指向到c盘
- vue引入query
1 首先先安装query.(cnpm install query --save-dev)或者 在package.json里的dependencies加入"jquery" : &qu ...
- @Scheduled(cron = "0/5 * * * * *")将时间改为配置
有两种方法:第一种当然你可以把Scheduled写到xml文件中进行配置. 第二种在你的类前面添加 此处讲解第二种写法 第二种在你的类前面添加@PropertySource("classpa ...
- Spring Boot 2.2.0 正式发布,支持 JDK 13!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 推荐阅读: Spring Boot 2.2.0 正式发布了,可从 repo.spring.io 或是 Maven Centr ...
- 树形dp相关
前言 1:与树或图的生成树相关的动态规划. 2:以每棵子树为子结构,在父亲节点合并,注意树具有天然的子结构.这是很优美的很利于dp的. 3:巧妙利用Bfs或Dfs序,可以优化问题,或得到好的解决方法. ...
- The order of a Tree
The order of a Tree Problem Description As we know,the shape of a binary search tree is greatly rela ...
- [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)
[多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值 ...
- Diango路由映射FBV和CBV
django中请求处理方式有2种:FBV(function base views) 和 CBV(class base views),换言之就是一种用函数处理请求,一种用类处理请求. FBV # url ...
- CyclicBarrier、CountDownLatch、Callable、FutureTask、thread.join() 、wait()、notify()、Condition
CyclicBarrier使用: import java.util.Random; import java.util.concurrent.BrokenBarrierException; import ...
- Trait讲解
<?php /** * Trait解决PHP单继承的一种方法,使开发人员在不同层次结构的类中复用属性和方法 * Trait无法实例化 * Trait不是类,不能被继承,所以不能再Trait中不能 ...