weixin_39922004
weixin_39922004
2020-12-02 02:24

bug report

configs只保留一个例子的时候会报错! image

软件版本 CommandTrayHost-2.3-b450 Windows x64

修改后的config文件 { / * 0. 常见样例可以参考项目wiki. * 1. "cmd"必须包含.exe.如果要运行批处理.bat, 可以使用 cmd.exe /c或者cmd.exe /k. * 2. 所有的路径必须要是C:\Windows这样的双斜杠分割,这是json的字符串规定。 * 3. 所有的路径都可以是相对路径,比如 ....\icons\icon.ico这种形式。 * 但是参考各有不同: * cmd里面的子程序工作路径由working_directory指定 * 其他路径则是CommandTrayHost.exe所在目录指定 * 4. 相对路径规则。首先绝对路径不会改变,规则只对相对路径有效,其次cmd只会相对path。 * path: i) path为空且cmd为绝对路径,此时path会从cmd提取路径 * ii) 除 i) 以外的相对路径都是相对于CommandTrayHost.exe所在路径 * working_directory: * i) 如果working_directory以>开头,那么它会相对于CommandTrayHost.exe所在目录 * ii) 除 i) 以外的情况都是相对于经过处理过的path * 5. 本文可以用系统自带的记事本编辑,然后保存选Unicode(大小端无所谓)或者UTF-8都可以 * 如果用VS Code或者Sublime Text编辑,可以用JSON with Comments语法着色 * 6. 多个CommandTrayHost.exe只要放到不同目录,就可以同时运行与开机启动,互相不影响. 当然了默认配置是为了演示用, * 启用了全部热键,第二个启动时会提示热键冲突,禁用或者修改第二个的热键即可。 * 7. 如果改成 "enable_cache": true ,则会将用户操作缓存到command_tray_host.cache * 可以缓存用户的启用停用状态,窗口的位置大小,以及显示隐藏状态。作用下次启动 * CommandTrayHost.exe时,会忽略config.json里面的值。 * 缓存失效判定是与config.json之间的时间戳先后对比。缓存写入磁盘只会在全部操作(全部启用 * 全部禁用,全部显示隐藏),以及退出时发现缓存发生有效更改时才会写入磁盘。 * 8. 全局热键格式: 可以使用alt win shift ctrl的任意个组合加上一个按键 * 加上的按键支持0-9的数字 A-Z的字母,其他特殊按钮,鼠标左右键,滚轮,甚至手柄按钮也是可以的.比如上方向键0x26 * 键盘码参考这里 https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx * 大小写无关,顺序无关,如果多个非修饰符的按钮,最后的那个按钮会起作用。 * 热键注册失败,一般是与系统中存在的冲突了,换一个再试 * 9. crontab语法,秒 分 时 日期 月份 星期,比常规crontab多了个秒钟,具体语法使用搜索引擎 * 例子 0 0/10 * * 每10分钟运行一次 * 例子 0 1,11,21 * * 每小时的1分 11分 21分运行一次 * 例子 0 2/10 12-14 * * 12点到14点,每小时从2分钟开始每10分钟运行一次 * 日志文件超过10M会进行rotate,最多支持rotate文件数为500 */ "configs": [ { // 下面8个一个不能少 "name": "cmd例子", // 系统托盘菜单名字 "path": "C:\Windows\System32", // cmd的exe所在目录,相对路径是可以的,参考目录是CommandTrayHost.exe所在目录 "cmd": "cmd.exe", // cmd命令,必须含有.exe "working_directory": "", // 命令行的工作目录. 如果是相对路径,>开头意味着相对于CommandTrayHost.exe,否则相对于path。 "addition_env_path": "", // dll搜索目录,暂时没用到 "use_builtin_console": false, // 是否用CREATE_NEW_CONSOLE,暂时没用到 "is_gui": false, // 是否是 GUI图形界面程序 "enabled": true, // 是否当CommandTrayHost启动时,自动开始运行 // 下面的是可选参数 // 当CommandTrayHost不是以管理员运行的情况下,由于UIPI,显示/隐藏会失效,其他功能正常。 "require_admin": false, // 是否要用管理员运行 "start_show": false, // 是否以显示(而不是隐藏)的方式启动子程序 "ignore_all": false, // 是否忽略全部启用禁用操作 "position": [ // 显示窗口的初始位置 0.2, // STARTUPINFO.dwX 大于1就是数值,0-1之间的数值代表相对屏幕分辨率的百分比 200 // STARTUPINFO.dwY, 同上 ], "size": [ // 显示窗口的初始大小 0.5, // STARTUPINFO.dwXSize, 同上 0.5 // STARTUPINFO.dwYSize, 同上 ], "icon": "", // 命令行窗口的图标 "alpha": 170, // 命令行窗口的透明度,0-255之间的整数,0为完全看不见,255完全不透明 "topmost": false, // 命令行窗口置顶 // 具体说明参考顶部注释7 "hotkey": { // 下面并不需要都出现,可以只设置部分 "disable_enable": "Shift+Win+D", // 启用/禁用切换 "hide_show": "Shift+Win+H", // 显示/隐藏切换 "restart": "Shift+Win+R", // 重启程序 "elevate": "Shift+Win+A", // 以管理员运行本程序 }, "not_host_by_commandtrayhost": false, // 如果设置成了true,那么CommandTrayHost就不会监控它的运行了 "not_monitor_by_commandtrayhost": false, // 如果设置成true同上,但是会随着CommandTrayHost退出而关闭。 "kill_timeout": 200, // 执行关闭操作时,先尝试通知程序自己关闭然后等多少ms,然后再杀进程,默认是200ms "exclusion_id": 1, // 互斥id,要求是大于0的整数。相同的互斥id启动时,会先杀掉其他。 "kill_process_tree": false, // 杀进程的时候同时杀掉其子进程,用于nginx. 为true时,kill_timeout无效 }, ], "global": true, // 可选参数 "require_admin": false, // 是否让CommandTrayHost运行时弹出UAC对自身提权 "icon": "", // 托盘图标路径,只支持ico文件,可以是多尺寸的ico; 空为内置图标 "icon_size": 256, // 图标尺寸 可以用值有256 32 16 "cmd_menu_max_length": 0, // cmd和path最大字符串个数,0表示不限制,大于0整数表示超过之后用...标出 "lang": "auto", // zh-CN en-US https://msdn.microsoft.com/en-us/library/cc233982.aspx "groups": [ // groups的值是一个数组(方括号),可以有两种类型,一种为数值,一种为object(花括号)。object代表下级菜单。最多可以40层嵌套。object必须有name字段 { "name": "cmd例子分组1", // 分级菜单的名字 "groups": [ 0, // 编号,是configs的编号。数组下标,从0开始 1, ], }, { "name": "cmd例子分组2", "groups": [ 2, 1, ], }, 2, { "name": "empty test", // 可以没有groups,但是不能没有name }, ], "enable_groups": true, // 启用分组菜单 "groups_menu_symbol": "+", // 分组菜单标志 "left_click": [ 0, 1 ], // 左键单击显示/隐藏程序 configs序号,从0开始.空数组或者注释掉,则显示CommandTrayHost本体 "enable_cache": true, // 启用cache "conform_cache_expire": true, // CommandTrayHost是否检查cache文件和配置文件,设为false时热加载被禁用 "disable_cache_position": false, // 禁止缓存窗口位置 "disable_cache_size": false, // 禁止缓存窗口大小 "disable_cache_enabled": true, // 禁止缓存启用禁用状态 "disable_cache_show": false, // 禁止缓存显示隐藏状态 "disable_cache_alpha": false, // 禁止缓存透明度 (缓存时只对有alpha值的configs有作用) // 具体说明参考顶部注释7 "hotkey": { // 并不要求全部配置,可以只配置需要的 "disable_all": "Alt+Win+Shift+D", "enable_all": "Alt Win + Shift +E", // 空格或者+号都可以 "hide_all": "Alt+WIN+Shift+H", // 大小写无关的 "show_all": "AlT Win Shift s", // 甚至这种都可以识别 "restart_all": "ALT+Win+Shift+U", "elevate": "Alt+wIn+Shift+a", "exit": "Alt+Win+Shift+X", // 但是比较推荐这种格式 "left_click": "Alt+Win+Shift+L", "right_click": "Alt+Win+Shift+R", // 下面的五个快捷键,可以对外部程序生效 "add_alpha": "Alt+Ctrl+Win+0x26", // 修改当前激活的任何窗口(要可能)透明度,不仅仅只对本程序托管的有效,其他程序也行 "minus_alpha": "Alt+Ctrl+Win+0x28", //上面上箭头 这里下箭头 Alt+Ctrl+Win+↑↓ "topmost": "Alt+Ctrl+Win+T", // 切换当前窗口的置顶状态 "hide_current": "Alt+Ctrl+Win+H", // 隐藏当前窗口,可以在托盘图标上找到对应项目 "show_all_docked": "Alt+Ctrl+Win+S", // 显示所有被上面这个快捷键隐藏的窗口 }, "repeat_mod_hotkey": false, // 是否长按算多次,Windows XP下面无效 "global_hotkey_alpha_step": 5, // 上面透明度调节的幅度 "show_hotkey_in_menu": true, // 在菜单后面加上成功注册的热键 "enable_hotkey": true, "start_show_silent": true, // 启动的时候屏幕不会闪(也就是等到获取到窗口才显示) "auto_hot_reloading_config": false, // 这个为true时,相当于自动点击加载配置弹窗的否 "auto_update": true, "skip_prerelease": true, "keep_update_history": false, // 是否保留自动更新时的临时文件 }

该提问来源于开源项目:rexdf/CommandTrayHost

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • weixin_39809793 weixin_39809793 4月前

    这是故意的,对配置检查比较严格。其实错误弹窗的标题已经提示哪里出错了。配置文件大部分都是可以缺省的配置,但是只要出现就要求有正确的意义。

    对这个问题的解决,当初想的是另外做一个图形化的配置编辑器,即使是网页版的都可以,但是咕咕咕……

    点赞 评论 复制链接分享
  • weixin_39922004 weixin_39922004 4月前

    已经很不错了!

    点赞 评论 复制链接分享
  • weixin_39809793 weixin_39809793 4月前

    分组菜单里面有1和2,而只有一个config,下标错误。

    点赞 评论 复制链接分享
  • weixin_39922004 weixin_39922004 4月前

    关闭分组菜单,删除groups也报错

    
    {
        /**
         * 0. 常见样例可以参考项目wiki.
         * 1. "cmd"必须包含.exe.如果要运行批处理.bat, 可以使用 cmd.exe /c或者cmd.exe /k.
         * 2. 所有的路径必须要是C:\\Windows这样的双斜杠分割,这是json的字符串规定。
         * 3. 所有的路径都可以是相对路径,比如 ..\..\icons\icon.ico这种形式。
         *    但是参考各有不同:
         *    cmd里面的子程序工作路径由working_directory指定
         *    其他路径则是CommandTrayHost.exe所在目录指定
         * 4. 相对路径规则。首先绝对路径不会改变,规则只对相对路径有效,其次cmd只会相对path。
         *    path:  i) path为空且cmd为绝对路径,此时path会从cmd提取路径
         *          ii) 除 i) 以外的相对路径都是相对于CommandTrayHost.exe所在路径
         *    working_directory:
         *           i) 如果working_directory以>开头,那么它会相对于CommandTrayHost.exe所在目录
         *          ii) 除 i) 以外的情况都是相对于经过处理过的path
         * 5. 本文可以用系统自带的记事本编辑,然后保存选Unicode(大小端无所谓)或者UTF-8都可以
         *    如果用VS Code或者Sublime Text编辑,可以用JSON with Comments语法着色
         * 6. 多个CommandTrayHost.exe只要放到不同目录,就可以同时运行与开机启动,互相不影响. 当然了默认配置是为了演示用,
         *    启用了全部热键,第二个启动时会提示热键冲突,禁用或者修改第二个的热键即可。
         * 7. 如果改成 "enable_cache": true ,则会将用户操作缓存到command_tray_host.cache
         *    可以缓存用户的启用停用状态,窗口的位置大小,以及显示隐藏状态。作用下次启动
         *    CommandTrayHost.exe时,会忽略config.json里面的值。
         *    缓存失效判定是与config.json之间的时间戳先后对比。缓存写入磁盘只会在全部操作(全部启用
         *    全部禁用,全部显示隐藏),以及退出时发现缓存发生有效更改时才会写入磁盘。
         * 8. 全局热键格式: 可以使用alt win shift ctrl的任意个组合加上一个按键
         *    加上的按键支持0-9的数字 A-Z的字母,其他特殊按钮,鼠标左右键,滚轮,甚至手柄按钮也是可以的.比如上方向键0x26
         *    键盘码参考这里 https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
         *    大小写无关,顺序无关,如果多个非修饰符的按钮,最后的那个按钮会起作用。
         *    热键注册失败,一般是与系统中存在的冲突了,换一个再试
         * 9. crontab语法,秒 分 时 日期 月份 星期,比常规crontab多了个秒钟,具体语法使用搜索引擎
         *    例子 0 0/10 * * * *  每10分钟运行一次
         *    例子 0 1,11,21 * * * 每小时的1分 11分 21分运行一次
         *    例子 0 2/10 12-14 * * * 12点到14点,每小时从2分钟开始每10分钟运行一次
         *    日志文件超过10M会进行rotate,最多支持rotate文件数为500
         */
        "configs": [
            {
                // 下面8个一个不能少
                "name": "cmd例子", // 系统托盘菜单名字
                "path": "C:\\Windows\\System32", // cmd的exe所在目录,相对路径是可以的,参考目录是CommandTrayHost.exe所在目录
                "cmd": "cmd.exe", // cmd命令,必须含有.exe
                "working_directory": "", // 命令行的工作目录. 如果是相对路径,>开头意味着相对于CommandTrayHost.exe,否则相对于path。
                "addition_env_path": "", // dll搜索目录,暂时没用到
                "use_builtin_console": false, // 是否用CREATE_NEW_CONSOLE,暂时没用到
                "is_gui": false, // 是否是 GUI图形界面程序
                "enabled": true, // 是否当CommandTrayHost启动时,自动开始运行
                // 下面的是可选参数
                // 当CommandTrayHost不是以管理员运行的情况下,由于UIPI,显示/隐藏会失效,其他功能正常。
                "require_admin": false, // 是否要用管理员运行
                "start_show": false, // 是否以显示(而不是隐藏)的方式启动子程序
                "ignore_all": false, // 是否忽略全部启用禁用操作
                "position": [ // 显示窗口的初始位置
                    0.2, // STARTUPINFO.dwX 大于1就是数值,0-1之间的数值代表相对屏幕分辨率的百分比
                    200 // STARTUPINFO.dwY, 同上
                ],
                "size": [ // 显示窗口的初始大小
                    0.5, // STARTUPINFO.dwXSize,  同上
                    0.5 // STARTUPINFO.dwYSize, 同上
                ],
                "icon": "", // 命令行窗口的图标
                "alpha": 170, // 命令行窗口的透明度,0-255之间的整数,0为完全看不见,255完全不透明
                "topmost": false, // 命令行窗口置顶
                // 具体说明参考顶部注释7
                "hotkey": { // 下面并不需要都出现,可以只设置部分
                    "disable_enable": "Shift+Win+D", // 启用/禁用切换
                    "hide_show": "Shift+Win+H", // 显示/隐藏切换
                    "restart": "Shift+Win+R", // 重启程序
                    "elevate": "Shift+Win+A", // 以管理员运行本程序
                },
                "not_host_by_commandtrayhost": false, // 如果设置成了true,那么CommandTrayHost就不会监控它的运行了
                "not_monitor_by_commandtrayhost": false, // 如果设置成true同上,但是会随着CommandTrayHost退出而关闭。
                "kill_timeout": 200, // 执行关闭操作时,先尝试通知程序自己关闭然后等多少ms,然后再杀进程,默认是200ms
                "exclusion_id": 1, // 互斥id,要求是大于0的整数。相同的互斥id启动时,会先杀掉其他。
                "kill_process_tree": false, // 杀进程的时候同时杀掉其子进程,用于nginx. 为true时,kill_timeout无效
            },
        ],
        "global": true,
        // 可选参数
        "require_admin": false, // 是否让CommandTrayHost运行时弹出UAC对自身提权
        "icon": "", // 托盘图标路径,只支持ico文件,可以是多尺寸的ico; 空为内置图标
        "icon_size": 256, // 图标尺寸 可以用值有256 32 16
        "cmd_menu_max_length": 0, // cmd和path最大字符串个数,0表示不限制,大于0整数表示超过之后用...标出
        "lang": "auto", // zh-CN en-US https://msdn.microsoft.com/en-us/library/cc233982.aspx
        "enable_groups": false, // 启用分组菜单
        "groups_menu_symbol": "+", // 分组菜单标志
        "left_click": [
            0,
            1
        ], // 左键单击显示/隐藏程序 configs序号,从0开始.空数组或者注释掉,则显示CommandTrayHost本体
        "enable_cache": true, // 启用cache
        "conform_cache_expire": true, // CommandTrayHost是否检查cache文件和配置文件,设为false时热加载被禁用
        "disable_cache_position": false, // 禁止缓存窗口位置
        "disable_cache_size": false, // 禁止缓存窗口大小
        "disable_cache_enabled": true, // 禁止缓存启用禁用状态
        "disable_cache_show": false, // 禁止缓存显示隐藏状态
        "disable_cache_alpha": false, // 禁止缓存透明度 (缓存时只对有alpha值的configs有作用)
        // 具体说明参考顶部注释7
        "hotkey": { // 并不要求全部配置,可以只配置需要的
            "disable_all": "Alt+Win+Shift+D",
            "enable_all": "Alt Win + Shift +E", // 空格或者+号都可以
            "hide_all": "Alt+WIN+Shift+H", // 大小写无关的
            "show_all": "AlT Win Shift    s", // 甚至这种都可以识别
            "restart_all": "ALT+Win+Shift+U",
            "elevate": "Alt+wIn+Shift+a",
            "exit": "Alt+Win+Shift+X", // 但是比较推荐这种格式
            "left_click": "Alt+Win+Shift+L",
            "right_click": "Alt+Win+Shift+R",
            // 下面的五个快捷键,可以对外部程序生效
            "add_alpha": "Alt+Ctrl+Win+0x26", // 修改当前激活的任何窗口(要可能)透明度,不仅仅只对本程序托管的有效,其他程序也行
            "minus_alpha": "Alt+Ctrl+Win+0x28", //上面上箭头 这里下箭头 Alt+Ctrl+Win+↑↓
            "topmost": "Alt+Ctrl+Win+T", // 切换当前窗口的置顶状态
            "hide_current": "Alt+Ctrl+Win+H", // 隐藏当前窗口,可以在托盘图标上找到对应项目
            "show_all_docked": "Alt+Ctrl+Win+S", // 显示所有被上面这个快捷键隐藏的窗口
        },
        "repeat_mod_hotkey": false, // 是否长按算多次,Windows XP下面无效
        "global_hotkey_alpha_step": 5, // 上面透明度调节的幅度
        "show_hotkey_in_menu": true, // 在菜单后面加上成功注册的热键
        "enable_hotkey": true,
        "start_show_silent": true, // 启动的时候屏幕不会闪(也就是等到获取到窗口才显示)
        "auto_hot_reloading_config": false, // 这个为true时,相当于自动点击加载配置弹窗的否
        "auto_update": true,
        "skip_prerelease": true,
        "keep_update_history": false, // 是否保留自动更新时的临时文件
    }
    
    
    
    点赞 评论 复制链接分享
  • weixin_39809793 weixin_39809793 4月前

    另外还有一个左键单击要删掉

    
    "left_click": [
            0,
            1
        ],
    
    点赞 评论 复制链接分享
  • weixin_39809793 weixin_39809793 4月前

    或者从最简的配置开始比较方便? wiki里面提到了最简的合法配置。

    点赞 评论 复制链接分享
  • weixin_39922004 weixin_39922004 4月前

    谢谢,搞定,是这个问题。

    所以其实还是软件哪里有bug吧?可以优化一下的,哈哈!

    点赞 评论 复制链接分享