V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
h4lbhg1G
V2EX  ›  分享创造

撸了一个 Windows 下面的命令行托盘工具

  •  1
     
  •   h4lbhg1G · 2017-11-28 19:14:32 +08:00 · 7671 次点击
    这是一个创建于 2335 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    example

    第 1 条附言  ·  2017-11-29 06:59:24 +08:00
    @wwqgtxx 0.4.0 支持管理员运行了,然而由于安全机制的原因,还有各种不便。要是集成 https://github.com/hfiref0x/UACME,估计会被绝大部分杀软直接封杀。
    第 2 条附言  ·  2017-12-01 08:28:51 +08:00
    好了最新版 0.8.0 支持自定义托盘图标,换掉了那个多尺寸的 Python 图标,尺寸由 700k 减小到,现在静态编译的二进制只有不到 250k 了。
    第 3 条附言  ·  2017-12-03 19:05:53 +08:00
    嗯 似乎已经凉透了。

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

    PS: AppVeyor 真是好用!
    第 4 条附言  ·  2017-12-04 17:24:35 +08:00

    example2

    第 5 条附言  ·  2017-12-15 18:28:22 +08:00
    最新的 1.6.5-b192 支持快捷热键了 支持全键盘操作了。
    第 6 条附言  ·  2017-12-21 09:13:41 +08:00
    最新版支持了 crontab 定时任务了
    第 7 条附言  ·  2017-12-30 21:48:14 +08:00
    支持热加载。现在配置随便修改,一保存就会自动加载了。
    40 条回复    2018-12-13 10:49:38 +08:00
    hljjhb
        1
    hljjhb  
       2017-11-28 20:07:02 +08:00
    挺实用的小工具
    h4lbhg1G
        2
    h4lbhg1G  
    OP
       2017-11-28 20:26:51 +08:00
    终于有人回复了!
    本身程序也很小,静态编译的不到 700k,没有 VC++运行库要求。之前使用批处理来做启动,然后发现了 phuslu/taskbar,结果就花了大约一天时间在那个上面改成现在这个。实际上还有那个项目的部分残余代码没有清理。
    Cannikin
        3
    Cannikin  
       2017-11-28 20:29:16 +08:00 via Android
    很棒!收藏了!
    loading
        4
    loading  
       2017-11-28 20:34:16 +08:00 via Android
    能不能做到菜单项目对应命令行是通过 ini 文件配置的。(我用手机,没试用。)

    做到便于配置。
    当然,ahk 也能很容易做出来。

    总之,start +1
    loading
        5
    loading  
       2017-11-28 20:35:34 +08:00 via Android
    看了一下说明,json 配置,赞!
    brightguo
        6
    brightguo  
       2017-11-28 20:55:01 +08:00
    cuit4017
        7
    cuit4017  
       2017-11-28 21:00:11 +08:00 via Android
    已 star
    h4lbhg1G
        8
    h4lbhg1G  
    OP
       2017-11-28 21:02:41 +08:00
    主要是想要托管子进程,隐藏和显示子进程窗口。主进程退出(奔溃),杀掉所有子进程。我是除了那些会写的很爽的以外,尽量全部用 Windows API 实现,所以会小一点。比如 PathCombine PathFileExists ZeroMemory 等 API。
    qzbysh
        9
    qzbysh  
       2017-11-28 21:09:20 +08:00
    这下可以抛弃 VBScript 啦
    LPeJuN6lLsS9
        10
    LPeJuN6lLsS9  
       2017-11-28 21:53:27 +08:00
    为啥是个 python 图标;还有很不便的一点:控制台 show 出来就得用托盘菜单隐藏,不然关闭窗口就再也出不来了
    h4lbhg1G
        11
    h4lbhg1G  
    OP
       2017-11-28 21:58:37 +08:00
    @hantsuki 嗯 关闭就是被杀掉了,这个可以用进程管理里面看到,必须用菜单隐藏。图标是暂时的,目前用的是之前项目 phuslu/taskbar 的
    LPeJuN6lLsS9
        12
    LPeJuN6lLsS9  
       2017-11-28 22:02:05 +08:00
    @h4lbhg1G 这个改进一下难度高吗,如果能改进实用度会提升很多啊
    h4lbhg1G
        13
    h4lbhg1G  
    OP
       2017-11-28 22:17:32 +08:00
    @hantsuki 我正在改关掉后菜单自动变灰。然后把主菜单的隐藏实装为隐藏全部窗口。
    h4lbhg1G
        14
    h4lbhg1G  
    OP
       2017-11-28 22:50:07 +08:00
    @hantsuki 发布版本 0.2.0 现在清理了下菜单。加了个隐藏全部菜单。
    hubhub
        15
    hubhub  
       2017-11-28 23:09:26 +08:00 via Android
    恕我直言,这东西是做什么用的,我看半天没看明白啊,能不能说的明白一点
    lozzow
        16
    lozzow  
       2017-11-28 23:19:53 +08:00 via Android
    这几天正想找个类似的程序,太感谢了
    LPeJuN6lLsS9
        17
    LPeJuN6lLsS9  
       2017-11-28 23:20:21 +08:00
    @h4lbhg1G 可以,我明天试试……
    wwqgtxx
        18
    wwqgtxx  
       2017-11-29 00:04:25 +08:00 via iPhone
    建议支持一下以管理员权限启动应用的功能,虽然可以用 powershell verb runas 来实现,但还是希望能更人性化一点
    xuanyuanaosheng
        19
    xuanyuanaosheng  
       2017-11-29 09:03:50 +08:00 via Android
    正在用
    h4lbhg1G
        20
    h4lbhg1G  
    OP
       2017-12-01 08:30:18 +08:00
    @hubhub 其实没啥大用途。现在都是 GUI 大行其道,这是个命令行工具。
    lirener
        21
    lirener  
       2017-12-07 09:56:34 +08:00
    先留名 后编辑 占前排 (回头汇报测试结果)
    lirener
        22
    lirener  
       2017-12-07 10:17:44 +08:00
    好吧才知道回复了不能编辑 简单的测试了一下 弱弱的问一下 有老板键吗?就是和 QQ 一样 一键呼出然后再隐藏的
    只要一键呼出所有 再按一下热键隐藏所有 一个热键模拟点击托盘的操作就行了……可以吗
    类似工作室多开查看游戏一样 但是我基本也是操作控制台 cmd 用 然后要是可以在设置里面加入不一键呼出的开关就更好了 比如可能不想被一键呼出的可以设置个 on/off
    Akkuman
        23
    Akkuman  
       2018-01-21 16:08:12 +08:00 via Android
    @brightguo @h4lbhg1G 感谢两位写的工具,收藏了一月,刚开始用,已经用上几天了,本人也是命令行东西比较多,这软件倒是比较方便了
    h4lbhg1G
        24
    h4lbhg1G  
    OP
       2018-01-21 16:13:50 +08:00
    @Akkuman 有什么建议和问题可以直接反馈哦!
    @lirener 是这个项目发展中最大的贡献者了。后来添加的功能(从热键到快捷键、缓存、老板键)基本是都是他提出来以及 bug 测试的。
    brightguo
        25
    brightguo  
       2018-01-21 17:01:23 +08:00
    @Akkuman 不谢~ 才发现原来 @h4lbhg1G 也做和我类似的东西,并且做得更丰富(当然代码看起来也吓人的多)。
    我的就写了 500 行代码,适合我这种菜鸟使用使用~~
    brightguo
        26
    brightguo  
       2018-01-21 17:04:15 +08:00
    虽然我也是做的 C++桌面开发,但是对于楼主能轻松撸出这么多基于 windows API 的函数,佩服啊。我就只能用 Qt 做些简单的软件。。。
    h4lbhg1G
        27
    h4lbhg1G  
    OP
       2018-01-21 17:19:39 +08:00
    @brightguo 其实编译的静态无额外 dll 依赖二进制也就 300k,运行内存 100k 左右稳定。其实这玩意的起源是我之前用的类似当做开始菜单用的是一个 2000 多行的 ahk 脚本,那是逐年写的。

    写这个主要是想在 ahk 里面实现这个随时隐藏显示命令行的功能,然后过程中感觉 ahk 的那种不严格的语法很不爽。VS 倒是啪啪就写好一个可以跑的了,果真是宇宙第一个 IDE。逃
    h4lbhg1G
        28
    h4lbhg1G  
    OP
       2018-01-21 17:22:40 +08:00
    @brightguo 唔,我还不会搞 UI。说实话,我都不知道 UI 该从哪里开始搞。这是因为是搞过 icpc 的。
    Akkuman
        29
    Akkuman  
       2018-01-21 18:57:15 +08:00 via Android
    @h4lbhg1G 运行内存只有 100 多 k ?我家里老电脑,32 位 win7 测试是大约 10m 多点,期间运行的只有 aria2c.exe
    brightguo
        30
    brightguo  
       2018-01-21 19:39:54 +08:00
    @h4lbhg1G 厉害厉害~~我最近也在看,才简单的题目,头都大了。。
    h4lbhg1G
        31
    h4lbhg1G  
    OP
       2018-01-21 19:43:08 +08:00
    @Akkuman 不会这么大吧?我就没见过超过 6M 过。是越用越多还是稳定 10M,晚些时候我找台 win7 测试下。


    我 20 多个配置,启动 2M 到 3M,运行一会后任务管理器里面是 100k。

    当然我的测试环境是从不唤出右键菜单(这里会有一个内存开销),还有一个小技巧就是把 auto_update:false,缓存也会消耗内存。

    嘛,估计是 Windows10 的内存机制吧,Windows10 任务管理里面观察使用过程中似乎内存是越用越少的。

    看我的截图,这是我唤出过右键的,依然不到 1M。

    https://i.loli.net/2018/01/21/5a647c501ee8d.png
    brightguo
        32
    brightguo  
       2018-01-21 19:44:07 +08:00
    @Akkuman 我的 BatchRunTrayTool.exe 在 Win10 上是 10MB 左右,我都不能控制它内存占用多大,也不知道为毛这么大~
    h4lbhg1G
        33
    h4lbhg1G  
    OP
       2018-01-21 19:54:13 +08:00
    @Akkuman 我极限测试的时候是 300 个配置,嵌套是到了 10 层左右。加载时 1 秒左右,显示也基本上实时。我这里看的内存可以达到 130M。 另外如果发现内存越用越多,那就是严重问题了(虽然我觉得应该不会有),请一定报告下问题。


    @brightguo 大约是 Qt 的库函数要占点空间之类的吧。Qt 好用么?我也有点想看看 Qt。
    Akkuman
        34
    Akkuman  
       2018-01-21 20:07:27 +08:00 via Android
    @h4lbhg1G @brightguo 你们都用 10 么?唉,一直用 7,10 用了下实在感觉有点不习惯,虽说知道迟早也是要用这个的
    @h4lbhg1G 待会我上电脑测试看看具体的占用情况,上次也就是看了下
    brightguo
        35
    brightguo  
       2018-01-21 20:23:42 +08:00
    @h4lbhg1G Qt 当然好用,就是因为太好用了(主要还是上手简单啦),导致很多底层知识我都不看不想了解~
    brightguo
        36
    brightguo  
       2018-01-21 20:26:55 +08:00
    @Akkuman Win10 有超爽的快捷菜单栏(主要是能放的很多),多桌面切换。各种系统配置界面都优化了(如环境变量设置界面),程序员必须用起来,会节约很多时间。
    h4lbhg1G
        37
    h4lbhg1G  
    OP
       2018-01-21 21:02:31 +08:00
    嗯 我属于如果可能就会用版本号最大的软件,除非真的是有严重问题。软件版本升级自然是越来越好的(一些国产商业免费软件除外)。Windows10 的兼容性应该还不错了,当然具体到最终用户,大约就是习惯、版权、行业软件兼容性之类的吧。
    Akkuman
        38
    Akkuman  
       2018-01-22 16:38:27 +08:00 via Android
    测试看了看,那个 10m 多应该是刚开机的时候,后来占用大约是 1500k 左右,常驻运行是 caddy 和 aria2
    h4lbhg1G
        39
    h4lbhg1G  
    OP
       2018-01-22 21:49:07 +08:00
    @Akkuman 1 到 2M 我这边也算是正常的,CommandTrayHost 的内存占用,与托管的程序是什么以及否运行是没有直接关系的,只与配置数量有关。另外设置参数也有一定关系,比如刚刚换出过右键菜单,或者用了 crontab,那样 1~2M 占用是比较正常的了。是预期的情况,我没啥好纠结的了。另外可能某些杀软或者某些特殊软件比如 SysinternalsSuite 的 Process Explorer 一旦打开,也会普遍导致占用上升一点。

    刚好这时我的占用是 100k 左右,可能是我现在运行程序有点多缘故。

    https://i.loli.net/2018/01/22/5a65eb531e13f.png

    下面的算是我的碎碎念,看不明白可以忽略^_^

    在 Visual Studio 里面调试的时候,调试版到处 printf,各种临时变量,配置也是 10 来个左右,从 0.01 版本到现在 2.1.2 版本,基本上 Visual Studio 自带的内存显示都是 3M-6M 占用(调试版,会额外占用些用于保存 Debug 信息)。

    所以对于使用正式版出现 2 个配置 10M 占用还是比较惊讶。启动 CommandTrayHost 时,读取 config.json 这时会有一个动态内存分配,大小和 config.json 等同。同时会对配置进行合法性校验,参数取值范围校验。这时的占用,期望的是 2M 到 3M 左右。配置加载完了,这个内存会释放。

    然后 config.json 的实质内容就被转换了一个格式放到内存中了,主要的内存占用应该都是这个。期望的是十几或者几十 k 占用。

    如果开启了 auto_update,这样就相当于启动 CommandTrayHost 时自动点击了一次,菜单里面 帮助 下面的 检测更新。这时会开一个线程自动检查下,这里会有一个额外占用,期望是 1M 左右,和配置多少无关。但是检测完了,会自动退出。这个内存会自动释放。

    如果启用了 crontab,那么每次触发,可能会有不超过 1M 的内存占用。但都是触发完就会释放的。

    另外就是右键唤出菜单,这个会占用一些 1-2M,虽然是用完就会释放,但是操作系统似乎显示上的延迟还是怎么,感觉要过一会才会显示释放了。
    fcymk2
        40
    fcymk2  
       2018-12-13 10:49:38 +08:00
    好软件 收藏了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1965 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 16:15 · PVG 00:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.