zoukankan      html  css  js  c++  java
  • 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

      )

    )

  • 相关阅读:
    volley框架使用
    Insert Interval
    candy(贪心)
    Best Time to Buy and Sell Stock
    Best Time to Buy and Sell Stock III
    distinct subsequences
    edit distance(编辑距离,两个字符串之间相似性的问题)
    trapping rain water
    word break II(单词切分)
    sudoku solver(数独)
  • 原文地址:https://www.cnblogs.com/AnKen/p/7992695.html
Copyright © 2011-2022 走看看