Windows命令行程序系统托盘管理工具

本文最后更新于2017年12月23日,已超过 1 年没有更新,如果文章内容失效,请反馈给我们,谢谢!

转自v2ex

项目主页在这里 CommandTrayHost,二进制在这里

Windows命令行程序系统托盘管理工具

第 1 条附言  ·  24 天前

 
@wwqgtxx 0.4.0 支持管理员运行了,然而由于安全机制的原因,还有各种不便。要是集成 https://github.com/hfiref0x/UACME,估计会被绝大部分杀软直接封杀。

第 2 条附言  ·  22 天前

 
好了最新版 0.8.0 支持自定义托盘图标,换掉了那个多尺寸的 Python 图标,尺寸由 700k 减小到,现在静态编译的二进制只有不到 250k 了。

第 3 条附言  ·  19 天前

 

嗯 似乎已经凉透了。

现在已经搞好了分组层级菜单的 API,应该马上可以出自定义分组的版本了。也将保持配置向后兼容。

PS: AppVeyor 真是好用!

第 4 条附言  ·  18 天前

 

Windows命令行程序系统托盘管理工具

第 5 条附言  ·  7 天前

 
最新的 1.6.5-b192 支持快捷热键了 支持全键盘操作了。

第 6 条附言  ·  2 天前

 
最新版支持了 crontab 定时任务了

特性

  • json配置文件
  • 系统托盘
  • 支持以管理员运行
  • 显示隐藏命令行界面,方便查看日志 启动禁用管理
  • 可以配置任意多数量的(几十个应该没啥问题)后台命令行
  • 当CommandTrayHost退出时,由操作系统保证清理所有的子进程。
  • 自定义托盘图标和命令行图标
  • 本地化支持
  • 自定义菜单层级最多支持40级
  • 多实例运行与开机启动支持
  • 热键支持
  • Crontab计划任务

使用

下载

配置文件名必须是config.json,必须放到CommandTrayHost.exe所在目录。运行一次,会自动生成一个基本的模板。支持的编码为UTF8 UTF-16LE UTF-16BE UTF-32等,支持BOM识别。也就是支持记事本保存的Unicode和UTF-8格式。 (请使用1.1-b122之后的版本,有一个重大bug修复。#4)

配置样例

 

提示1: "cmd"必须包含.exe.如果要运行批处理.bat, 可以使用 cmd.exe /c.

提示2: 管理员比较复杂,如果不是真的需要。配置中不要出现任何require_admin。 简而言之:

  • 如果CommandTrayHost是以管理员运行的,那么启动的要求特权的子进程没啥问题,但是CommandTrayHost开机启动会比较麻烦,不能用菜单的那个。
  • 如果CommandTrayHost是以普通用户运行的,而且没有要求提权,但是 尝试启动了一个要求提权的程序 或者 对程序加上了"require_admin":true,, 那么运行时会弹出UAC,授权后是可以正常运行以及重启应用,但是启动后,非特权的CommandTrayHost是没法唤出显示的。

提示3: icon制作可以参考 这里

注意: 所有的路径,必须是\\分割的,这是因为json规定字符串,会自动转义\之后的字符。

使用样例

如何编译

  1. VS2015 Update3 或者 VS2017 (其实这是vcpkg的要求)
  2. 安装 vcpkg
  3. 为当前用户集成vcpkg,以管理员命令行运行(只要用管理员运行一次,以后就不需要管理员权限了) vcpkg integrate install
  4. 安装 rapidjson 和 nlohmann::json. vcpkg install rapidjson rapidjson:x64-windows nlohmann-json nlohmann-json:x64-windows
  5. 打开 CommandTrayHost.sln, 点击编译.

为了保证resource.hCommandTrayHost.rc编码为UTF-16LE(UCS-2)带BOM,在git clone之前,可能需要在%USERPROFILE%\.gitconfig文件最后面(不存在新建一个)加上如下内容:

如何本地化

看这个文件 CommandTrayHost/CommandTrayHost/language_data.h

Road map

  • 计划任务,定时任务
  • 热加载config.json

TODO

  • 现在一旦重启某个应用,那么之前的窗口就会被关掉,然后重新开启一个。这样之前的日志就丢失了。希望对每个应用,启动一个独立辅助Console,即使重新启动应用,历史日志(标准IO输出)依然可以保留。 use_builtin_console就是用来做这个用途的。可以参考的有 ConEmu,看上去必须要注入子进程,将其标准IO导入到ConsoleHelper才行。
  • 可以自动更新应用,比如kcptun-windows,提供github地址然后检测是否有更新。
  • 内置代理转换,如Socks5--> http,IE代理快速设置。
  • 尝试集成 Elevated Startup
  • UIPI (User Interface Privilege Isolation) Bypass. ChangeWindowMessageFilterEx

感谢

phuslu/taskbar @lirener

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: