最近有个需求,将同一个程序运行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窗口管理命令行工具的更多相关文章

  1. Linux 下一个很棒的命令行工具

    导读 Taskwarrior 是 Ubuntu/Linux 下一个简单而直接的基于命令行的 TODO 工具.这个开源软件是我曾用过的最简单的基于命令行的工具之一.Taskwarrior 可以帮助你更好 ...

  2. 如何用node编写命令行工具,附上一个ginit示例,并推荐好用的命令行工具

    原文 手把手教你写一个 Node.js CLI 强大的 Node.js 除了能写传统的 Web 应用,其实还有更广泛的用途.微服务.REST API.各种工具……甚至还能开发物联网和桌面应用.Java ...

  3. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  4. 【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目

    动机 简介 个人评分 动机 一般的框架都有脚手架工具,但是并不会让所有人满意. 简介 cookiecutter1是一个Python实现的命令行工具,可以通过项目模版来构建项目. 它的特性包括: 跨平台 ...

  5. OpenStack命令行工具与API

    Openstack命令行工具 我们推荐Openstack命令行工具和Openstack的Dashboard两者结合使用.一些用户由于使用过其他云技术背景的,可能会使用EC2兼容的API,相对于我们需要 ...

  6. **代码审查:Phabricator命令行工具Arcanist的基本用法

    Phabricator入门手册 http://www.oschina.net/question/191440_125562 Pharicator是FB的代码审查工具,现在我所在的团队也使用它来进行代码 ...

  7. commanderJs编写命令行工具(cli)

    前言: 最近需要做一个内部的node cli来独立构建流程,对整个命令行工具实现流程有了大致了解,下面来解释一下如何实现一个cli,和如何使用 commander 库.   新手误区: 在开始实现之前 ...

  8. Tools - Windows系统下的命令行工具Cmder

    cmder简介 官网:http://cmder.net/ GitHub:https://github.com/cmderdev/cmder Cmder是一个windows下的命令行工具,用来替代win ...

  9. face_recognition环境配置及命令行工具测试

    由于某种不可抗力(又是它!)我写了这篇博客,主要目的是记录. face_recognition是啥子? face_recognition号称世界上最简单的人脸识别库,可使用 Python 和命令行进行 ...

随机推荐

  1. linux最强编辑神器vim常用命令大全:编辑、插入、删除、替换、保存...

    我说vim是编辑器之神大家没有意见吧 下面分享一些vim常用命令,大家可以收藏一下 进入vim:  vim配置: vim中光标移动: vim中屏幕滚动: vim中插入文本类: 文本替换: 格式 : 范 ...

  2. Linux——临界段,信号量,互斥锁,自旋锁,原子操作

    一. linux为什么需要临界段,信号量,互斥锁,自旋锁,原子操作? 1.1. linux内核后期版本是支持多核CPU以及抢占式调度.这里就存在一个并发,竞争状态(简称竟态). 1.2. 竞态条件 发 ...

  3. nginx知识问答

    1.请解释一下什么是Nginx? 答:Nginx是一个web服务器和反向代理服务器,用于HTTP.HTTPS.SMTP.POP3和IMAP协议.2.请列举Nginx的一些特性? 答:Nginx服务器的 ...

  4. 线程中断:Thread类中interrupt()、interrupted()和 isInterrupted()方法详解

    首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行. i ...

  5. 【vuejs面试题】务必熟知的vuejs面试题「务必收藏」

    如果能帮到你,点个赞吧,务必熟知的vuejs面试题「务必收藏」 vuejs 基础必备 1.active-class 是哪个组件的属性?嵌套路由怎么定义 (1).active-class 是 vue-r ...

  6. SCUT - 486 - 无向图上的点 - Dijkstra

    好像原题是这个?https://www.cnblogs.com/kanchuang/p/11120052.html 这个有解释:https://blog.csdn.net/wddwjlss/artic ...

  7. Datatable 中的数据查询(查询不重复记录)

    http://blog.csdn.net/lovexiaoxiao/article/details/3734932 //在sql中我们使用distinct查询不重复记录    //然而我在项目中表关系 ...

  8. Set中如何区分重复元素

    Set接口常用实现类:HashSet和TreeSet HashSet区分重复元素: 先使用hashcode方法判断已经存在HashSet中元素的hashcode值和将要加入元素hashcode值是否相 ...

  9. 流畅的Python (Fluent Python) —— 第一部分

    Python 最好的品质之一是一致性. 魔术方法(magic method)是特殊方法的昵称.特殊方法也叫双下方法. 1.1 一摞Python风格的纸牌 import collections Card ...

  10. Qt是什么?Qt简介(非常全面)

    http://c.biancheng.net/view/1792.html Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical ...