撸了一个 Windows 下面的命令行托盘工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
h4lbhg1G
V2EX    分享创造

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

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

    项目主页在这里 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     Solana     870 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 20:41 PVG 04:41 LAX 13:41 JFK 16:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86