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

      )

    )

  • 相关阅读:
    ZHI.ZSystem开发组件介绍之时间、IP及经纬帮助类
    ZHI.ZSystem开发组件介绍之发送HTTP请求
    ZHI.ZSystem开发组件介绍之随机字符串生成
    ZHI.ZSystem开发组件介绍之数据类型转换
    ZHI.ZSystem开发组件介绍之AES加密解密
    docker 环境mgr搭建
    ceph搭建配置-三节点
    查看当前库的总体运行情况(oracle)
    moodle笔记
    爬取豆瓣书籍信息
  • 原文地址:https://www.cnblogs.com/AnKen/p/7992695.html
Copyright © 2011-2022 走看看