From 413cf44ed74a855cc6f34dd41149d17d55ec99eb Mon Sep 17 00:00:00 2001 From: abgox Date: Sun, 12 Jan 2025 22:55:23 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加功能: 当鼠标悬浮在符号上时,符号立即隐藏 - 合并输入法模式,并在 `自定义` 中,添加了 `状态码规则` 和 `切换码规则` Closes #134 --- README.md | 119 ++++++++--------- src/v2/CHANGELOG.md | 9 ++ src/v2/InputTip.JAB.JetBrains.exe | Bin 1355264 -> 1355264 bytes src/v2/InputTip.ahk | 2 +- src/v2/menu/app-offset.ahk | 2 +- src/v2/menu/bw-list.ahk | 10 +- src/v2/menu/check-update.ahk | 6 +- src/v2/menu/config.ahk | 9 +- src/v2/menu/input-mode.ahk | 210 ++++++++++++++---------------- src/v2/menu/tray-menu.ahk | 2 +- src/v2/utils/IME.ahk | 48 +++++-- src/v2/utils/check-version.ahk | 16 +-- src/v2/utils/show.ahk | 29 +++-- src/v2/utils/var.ahk | 7 + 14 files changed, 239 insertions(+), 230 deletions(-) diff --git a/README.md b/README.md index 2734ae8..2d475b4 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,13 @@ --- -> [!NOTE] +> [!Tip] > -> `托盘菜单` 指的是在电脑底部的任务栏右侧的 `InputTip` 软件托盘菜单 +> `托盘菜单` 指的是在底部任务栏右边的 `InputTip` 软件托盘菜单 ### 介绍 -- 基于 `AutoHotKey` 编写 +- 使用 `AutoHotKey` 编写,仅 Windows 系统可用 - 一个实时的输入法状态(中文/英文/大写锁定)提示工具 - 根据输入法状态改变鼠标样式 @@ -76,7 +76,7 @@ ### 使用 -> [!NOTE] +> [!Tip] > > - 因为以下原因,可能无法正常运行 `InputTip.exe` > - 没有管理员权限 @@ -92,7 +92,7 @@ > 3. 直接运行项目中的 `InputTip.ahk` 文件 > - `src\v2\InputTip.ahk` -> [!warning] +> [!Warning] > > - 软件中使用到了 `powershell`,请确保你的电脑环境中有 `powershell` > - 现在的 Windows,都内置了 `powershell`,但总有一些特殊环境没有,可能导致运行报错 @@ -157,8 +157,8 @@ 2. 安装 [AutoHotkey v2](https://www.autohotkey.com/) - 这一步完成后,你也可以直接运行 `src\v2\InputTip.ahk` 来使用 `InputTip` 3. 打开 `AutoHotKey Dash` -4. 点击左侧的 `Compile`,等待编译器下载完成 -5. 重新点击左侧的 `Compile` +4. 点击左边的 `Compile`,等待编译器下载完成 +5. 重新点击左边的 `Compile` 6. 将 `src\v2\InputTip.ahk` 拖入弹出的编译窗口中 7. 点击左下角的 `Convert` 完成编译 8. 运行编译后的 `InputTip.exe` @@ -187,7 +187,7 @@ > [通过 AutoHotkey 官方论坛中 Descolada 大佬给出的解决方案实现](https://www.autohotkey.com/boards/viewtopic.php?t=130941#p576439) -> [!Note] +> [!Tip] > > 如果有其他 JAB 程序,也可以按照此步骤进行设置 @@ -210,7 +210,7 @@ 5. 如果仍未生效,请重启 InputTip 或重启系统 -> [!TIP] +> [!Tip] > 如果有多块屏幕,副屏幕上可能有坐标偏差,需要通过 `托盘菜单` => `设置特殊偏移量` 手动调整 ### 关于符号 @@ -220,23 +220,25 @@ - `InputTip.exe` 启动后,会在同级目录下生成 `InputTipSymbol` 目录,其中包括 `default` 文件夹 - `default` 文件夹中包含了默认的图片符号 - - 当 `托盘菜单` 中 `更改配置` => `显示形式` => 第 2 个显示配置,选择 `显示图片符号` 时,会在输入光标附近显示对应的图片符号 - - 你也可以将自己喜欢的图片符号,或者自己制作图片符号,放入 `InputTipSymbol` 目录下(图片必须是 `.png` 格式) + - 当 `托盘菜单` 中 `更改配置` => `显示形式` => `2. 在输入光标附近显示什么类型的符号`,选择 `显示图片符号` 时,会在输入光标附近显示对应的图片符号 + - 你也可以将自己喜欢的图片符号,或者自己制作图片符号,放入 `InputTipSymbol` 目录下 + - 限制: 图片必须是 `.png` 格式 - [更多的符号图片](https://inputtip.pages.dev/download/extra) - 然后,点击 `托盘菜单` => `更改配置` => `图片符号`,在对应的下拉列表中选择正确的图片路径 - 如果留空,则不会显示对应状态的图片符号 #### 方块符号 -- 当 `托盘菜单` 中 `更改配置` => `显示形式` => 第 2 个显示配置,选择 `显示方块符号` 时,会在输入光标附近显示不同颜色的方块符号 +- 当 `托盘菜单` 中 `更改配置` => `显示形式` => `2. 在输入光标附近显示什么类型的符号`,选择 `显示方块符号` 时,会在输入光标附近显示不同颜色的方块符号 - 默认中文状态为**红色**,英文状态为**蓝色**,大写锁定为**绿色** - 方块符号相关的配置: `托盘菜单` => `更改配置` => `方块符号` - 当其中的方块符号的颜色设置修改为空时,则不会显示该状态的方块符号 - 比如: 你只希望在中文状态下显示方块符号,那么就将 `英文状态时方块符号的颜色` 和 `大写锁定时方块符号的颜色` 的值都设置为空 + - 如果选择 `显示文本符号`,方块符号的颜色为空会导致文本符号无法显示 #### 文本符号 -- 当 `托盘菜单` 中 `更改配置` => `显示形式` => 第 2 个显示配置,选择 `显示文本符号` 时,会在输入光标附近显示对应的文本符号 +- 当 `托盘菜单` 中 `更改配置` => `显示形式` => `2. 在输入光标附近显示什么类型的符号`,选择 `显示文本符号` 时,会在输入光标附近显示对应的文本符号 - 默认中文状态为 `中`,英文状态为 `英`,大写锁定为 `大` - 文本符号相关的配置: `托盘菜单` => `更改配置` => `文本符号` - 当其中的文本字符设置修改为空时,则不会显示该状态的文本符号 @@ -246,10 +248,7 @@ > [!Tip] > -> 也可以直接下载 [已经适配的鼠标样式](https://inputtip.pages.dev/download/extra) 来使用 - -> [!Tip] -> +> - 也可以直接下载 [已经适配的鼠标样式](https://inputtip.pages.dev/download/extra) 来使用 > - `InputTip.exe` 启动后,会在同级目录下生成 `InputTipCursor` 目录,其中包括 `default` 文件夹 > - `default` 用于存放中文/英文/大写锁定状态的 **默认** 鼠标样式 @@ -281,7 +280,7 @@ | Person | 人员选择 | | Pen | 手写 | - - 详情参考 [关于光标(游标)](https://learn.microsoft.com/windows/win32/menurc/about-cursors) + - 详情参考 [微软文档: 关于光标(游标)](https://learn.microsoft.com/windows/win32/menurc/about-cursors) 2. 点击 `托盘菜单` => `更改配置` => `鼠标样式` => 在下拉列表中选择对应文件夹目录路径 @@ -295,56 +294,42 @@ ### 兼容情况 -> [!NOTE] -> -> 这里的兼容情况也仅供参考,实际情况可能有所不同,你应该自行尝试 -> -> - 一般使用 `通用模式`,如果是 [讯飞输入法](https://srf.xunfei.cn/) 或 [手心输入法](https://www.xinshuru.com/),直接使用对应模式即可 -> -> - 否则,使用 `自定义` +#### 输入法兼容情况 + +> [!Tip] > -> - [输入法模式的已知问题](https://inputtip.pages.dev/FAQ/#输入法模式的已知问题) - -- 已知可用的输入法(通过模式切换兼容) - - - `通用模式`(默认): - - - [微信输入法](https://z.weixin.qq.com/) - - [搜狗输入法](https://shurufa.sogou.com/) - - [搜狗五笔输入法](https://wubi.sogou.com/) - - [QQ 输入法](https://qq.pinyin.cn/) - - [百度输入法](https://shurufa.baidu.com/) - - 微软 - - 微软拼音 - - 微软五笔 - - 微软仓颉 - - [冰凌输入法](https://icesofts.com/) - - [小狼毫(rime)输入法](https://rime.im/download/) - - 小鹤音形输入法 - - 需要使用 [多多输入法生成器](https://duo.ink/ddimegen/ddimegen-desc.html) 生成 - - 使用 [多多输入法生成器](https://duo.ink/ddimegen/ddimegen-desc.html) 生成的输入法都可用 - - [小小输入法](http://yongim.ysepan.com/) - - [影子输入法](https://gitee.com/orz707/Yzime) - - 需要关闭影子输入法中的 `tsf` - - 在键盘布局中,选择一个能正常识别状态的输入法(建议选择微信输入法、搜狗输入法等) - - 然后正常使用影子输入法即可 - - [可可五笔](https://suke.kim/) - - 谷歌输入法 - - - `讯飞输入法` - - 如果正在使用 [讯飞输入法](https://srf.xunfei.cn/),你需要选择它 - - `手心输入法` - - 如果你正在使用 [手心输入法](https://www.xinshuru.com/),你需要选择它 - - 兼容性一般,因为获取到的输入法状态可能有误,导致基于此的相关功能都可能有问题。 - - `自定义` - - 一个万能的模式,需要根据实际情况设置状态码和切换码 - - 详情参考: [关于设置输入法模式中的自定义](https://inputtip.pages.dev/FAQ/about-input-mode-custom) - -- 如何进行模式切换 - 1. 运行 `InputTip.exe` 后,在底部任务栏右侧找到软件托盘图标 - 2. `鼠标右击` 软件托盘图标 - 3. 点击 `设置输入法模式` => `1. 当前输入法模式` - 4. 选择一个可用的模式 +> 现在,InputTip 使用【通用】和【自定义】模式兼容输入法,默认使用【通用】模式 + +- `【通用】模式` + + - [微信输入法](https://z.weixin.qq.com/) + - [搜狗输入法](https://shurufa.sogou.com/),[搜狗五笔输入法](https://wubi.sogou.com/) + - [QQ 输入法](https://qq.pinyin.cn/) + - [百度输入法](https://shurufa.baidu.com/) + - 微软拼音,微软五笔,微软仓颉 + - [冰凌输入法](https://icesofts.com/) + - 小鹤音形输入法 + - 需要使用 [多多输入法生成器](https://duo.ink/ddimegen/ddimegen-desc.html) 生成 + - 使用 [多多输入法生成器](https://duo.ink/ddimegen/ddimegen-desc.html) 生成的输入法都可用 + - [小小输入法](http://yongim.ysepan.com/) + - [影子输入法](https://gitee.com/orz707/Yzime) + - 需要关闭影子输入法中的 `tsf` + - 在键盘布局中,选择一个能正常识别状态的输入法(建议选择微信输入法、搜狗输入法等) + - 然后正常使用影子输入法即可 + - [可可五笔](https://suke.kim/) + - 谷歌输入法 + +- `【自定义】模式` + + - 一个万能的模式,需要根据实际情况设置状态码和切换码 + - 详情参考: [关于【自定义】模式](https://inputtip.pages.dev/FAQ/about-input-mode-custom) + - `设置输入法模式` => `自定义` 进行配置: + - [小狼毫(rime)输入法](https://rime.im/download/): 勾选 `切换码规则` 中的 `使用偶数` + - [讯飞输入法](https://srf.xunfei.cn/): 勾选 `状态码规则` 中的 `使用奇数` + - [手心输入法](https://www.xinshuru.com/): 在 `切换码数字`的输入框中填入 `1` + - 兼容性一般,因为获取到的输入法状态可能有误,导致基于此的相关功能都可能有问题。 + +#### [应用窗口兼容情况](https://inputtip.pages.dev/FAQ/support-app-list) ### 参考项目 diff --git a/src/v2/CHANGELOG.md b/src/v2/CHANGELOG.md index 4cfc4c6..f445375 100644 --- a/src/v2/CHANGELOG.md +++ b/src/v2/CHANGELOG.md @@ -2,6 +2,15 @@ - 没有特别说明的版本都是修复问题 +## 2.31.0 + +- 当鼠标悬浮在符号上时,符号立即隐藏 + - 此功能在 `2.28.0` 中由于存在问题被移除,现在重新添加 +- 将 `设置输入法模式` 中的 `讯飞输入法` 和 `手心输入法` 模式合并到 `自定义` 中 + - 现在只有两个模式,`通用` 和 `自定义` +- 在 `自定义` 中,添加了 `状态码规则` 和 `切换码规则` +- 其他的修复和优化 + ## 2.30.2 - 修复了在极少数情况下(如 UAC 弹窗时),触发报错(拒绝访问)的问题 diff --git a/src/v2/InputTip.JAB.JetBrains.exe b/src/v2/InputTip.JAB.JetBrains.exe index 6b8b938f6132521ab485849daee939a1ae7c7672..c168de71bcbc1675c1b6ee5ac48ba50091bda906 100644 GIT binary patch delta 755 zcmZp;6Vz}gXu}>xraju5_c2<5=;mKc?Z229ffz(H12GE_vjQ<25VHd@2M}`tF&7YX z12GQ}^8zs+5c31E01yiTvC#HkOu|vE^~E6!3{O}Xz~F?DD1!))1>@fV^6ilLGRC3| zK1lowH2xMeK7)xU!vZFRc?--$86;T|d<_PM?Uy@*ubr?~P*YP#ElbS{E=epYE%wb% zNpp-F&rI8XNt5|LoZOjFR9z9CRVa(ZHri175=fg=1Y zWeQfd)29cC$f|P{rIwTyxCK;{G`xvc2bn`E!_FqhlKn$XpftUq|S%H`hh}nUd1Bf|+m&)D#TihGEw*-9A`EZMs8{h|G4E5Rv0T+h?YW=-V关于特殊偏移量', addConfirm: "", addConfirm2: "", addConfirm3: "", diff --git a/src/v2/menu/bw-list.ahk b/src/v2/menu/bw-list.ahk index b488bd1..1f6dc49 100644 --- a/src/v2/menu/bw-list.ahk +++ b/src/v2/menu/bw-list.ahk @@ -9,11 +9,9 @@ fn_bw_list(*) { g.SetFont(fz, "微软雅黑") bw := w - g.MarginX * 2 - g.AddText("cRed", "「白」名单机制: 只有在白名单中的应用进程窗口会显示符号`n「黑」名单机制: 只有不在黑名单中的应用进程窗口会显示符号") - g.AddLink(, '1. 建议使用 白名单机制,这样可以精确控制哪些应用进程窗口需要显示符号`n2. 使用白名单机制,可以减少大量特殊窗口的兼容性问题`n3. 如果选择了白名单机制,请及时添加你需要使用的应用进程到白名单中') - g.AddText(, "-------------------------------------------------------------------------------------") - - g.AddText(, "选择显示符号的名单机制: ") + g.AddText("cRed", "白名单机制 : 只有在「白」名单中的应用进程窗口会显示符号`n黑名单机制 : 只有不在「黑」名单中的应用进程窗口会显示符号") + g.AddLink("cGray", '如果你正在使用 白名单机制,InputTip 提供了同步添加机制`n当使用以下配置菜单时,添加的应用进程会同步添加到「白」名单中`n「设置光标获取模式」「设置特殊偏移量」「指定窗口自动切换状态」') + g.AddText(, "选择符号显示的名单机制: ") gc._bw_list := g.AddDropDownList("yp AltSubmit vuseWhiteList Choose" useWhiteList + 1, ["使用「黑」名单", "使用「白」名单"]) gc._bw_list.OnEvent("Change", fn_change_list) fn_change_list(item, *) { @@ -29,7 +27,7 @@ fn_bw_list(*) { g.SetFont(fz, "微软雅黑") bw := w - g.MarginX * 2 g.AddText("cRed", "确定要使用「黑」名单吗?") - g.AddText("cRed", "这是不建议的,使用它,你需要承担未知的可能存在的窗口兼容性代价") + g.AddText("cRed", "这是不建议的,更建议继续使用「白」名单`n因为「黑」名单机制下,你需要承担未知的可能存在的窗口兼容性代价") g.AddButton("w" bw, "【是】我确定要使用「黑」名单").OnEvent("Click", yes) g.AddButton("w" bw, "【否】不,我只是不小心点到了").OnEvent("Click", no) g.OnEvent("Close", no) diff --git a/src/v2/menu/check-update.ahk b/src/v2/menu/check-update.ahk index 1ae5e1c..709764d 100644 --- a/src/v2/menu/check-update.ahk +++ b/src/v2/menu/check-update.ahk @@ -6,10 +6,10 @@ fn_check_update(*) { gc.w.checkUpdateGui := "" } gc.checkUpdateDelay := checkUpdateDelay - g := Gui("AlwaysOnTop", "InputTip - 设置更新检测") + g := Gui("AlwaysOnTop", "InputTip - 设置更新检查") g.SetFont(fz, "微软雅黑") - g.AddEdit("ReadOnly cRed -VScroll w" w - g.MarginX * 2, "- 单位: 分钟,默认 1440 分钟(1 天)`n- 避免程序错误,可以设置的最大范围是 0-50000 分钟`n- 如果为 0,则表示不检测版本更新`n- 如果不为 0,在 InputTip 启动后,会立即检测一次`n- 如果大于 50000,则会直接使用 50000`n") - g.AddText(, "每隔多少分钟检测一次更新: ") + g.AddEdit("ReadOnly cRed -VScroll w" w - g.MarginX * 2, "- 单位: 分钟,默认 1440 分钟(1 天)`n- 避免程序错误,可以设置的最大范围是 0-50000 分钟`n- 如果为 0,则表示不检查版本更新`n- 如果不为 0,在 InputTip 启动后,会立即检查一次`n- 如果大于 50000,则会直接使用 50000`n") + g.AddText(, "每隔多少分钟检查一次更新: ") _c := g.AddEdit("yp Number Limit5 vcheckUpdateDelay") _c.Value := readIni("checkUpdateDelay", 1440) _c.OnEvent("Change", fn_change_delay) diff --git a/src/v2/menu/config.ahk b/src/v2/menu/config.ahk index bdfe738..c1d7390 100644 --- a/src/v2/menu/config.ahk +++ b/src/v2/menu/config.ahk @@ -131,8 +131,9 @@ fn_config(*) { configGui.AddEdit("xs ReadOnly cGray -VScroll w" Gui_width, "单位:毫秒,默认为 50 毫秒。一般使用 1-100 之间的值。`n此值的范围是 1-500,如果超出范围则无效,会取最近的可用值。`n值越小,响应越快,性能消耗越大,根据电脑性能适当调整") tab.UseTab(2) - configGui.AddText(, "你可以点击以下任意网址获取设置鼠标样式文件夹的相关说明:") - configGui.AddLink(, '官网 Github Gitee`n' line) + configGui.AddLink(, '查看设置鼠标样式文件夹的相关说明: 官网 Github Gitee') + configGui.AddText(, "建议点击下方的「下载鼠标样式扩展包」去下载已经适配的鼠标样式来使用") + configGui.AddText(, line) configGui.AddText("cRed", "如果列表中显示的鼠标样式文件夹路径不是最新的,请重新打开这个配置界面") typeList := [{ label: "中文状态", @@ -154,7 +155,6 @@ fn_config(*) { for i, v in typeList { configGui.AddText("xs", i ".") configGui.AddText("yp cRed", v.label) - configGui.AddText("yp", "鼠标样式: ") _g := configGui.AddDropDownList("xs r9 w" Gui_width " v" v.type "_cursor", dirList) _g.OnEvent("Change", fn_cursor_dir) fn_cursor_dir(item, *) { @@ -269,11 +269,10 @@ fn_config(*) { } configGui.AddText("xs Section cRed", "如果列表中显示的图片符号路径不是最新的,请重新打开这个配置界面") - configGui.AddText(, "选择或输入不同状态下的图片符号的图片路径(只能是 .png 图片或设置为空): ") + configGui.AddText(, "选择不同状态下的图片符号的文件路径: ") for i, v in typeList { configGui.AddText("xs", i ".") configGui.AddText("yp cRed", v.label) - configGui.AddText("yp", "图片符号: ") _g := configGui.AddDropDownList("xs r9 w" Gui_width " v" v.type "_pic", dirList) _g.OnEvent("Change", fn_pic_path) fn_pic_path(item, *) { diff --git a/src/v2/menu/input-mode.ahk b/src/v2/menu/input-mode.ahk index 05d21e4..83ba04d 100644 --- a/src/v2/menu/input-mode.ahk +++ b/src/v2/menu/input-mode.ahk @@ -1,7 +1,7 @@ fn_input_mode(*) { createGui(fn).Show() fn(x, y, w, h) { - global statusModeEN, conversionModeEN, mode, checkTimeout, gc + global statusModeEN, conversionModeEN, evenStatusModeEN, evenConversionModeEN, mode, checkTimeout, gc if (gc.w.inputModeGui) { gc.w.inputModeGui.Destroy() @@ -19,87 +19,20 @@ fn_input_mode(*) { g.SetFont(fz, "微软雅黑") bw := w - g.MarginX * 2 - gc.imList := ["1. 自定义", "2. 通用模式", "3. 讯飞输入法", "4. 手心输入法"] statusModeEN := readIni("statusModeEN", "", "InputMethod") conversionModeEN := readIni("conversionModeEN", "", "InputMethod") mode := readIni("mode", 1, "InputMethod") - tab := g.AddTab3("-Wrap", ["基础配置", "自定义"]) + gc.modeList := ["【自定义】", "【通用】"] + tab := g.AddTab3("-Wrap", ["基础配置", "自定义", "关于自定义"]) tab.UseTab(1) - g.AddText("Section cRed", "- 一般情况,使用「通用模式」,如果是讯飞或手心输入法,则选择对应模式。`n- 当修改了输入法模式之后,如果已经打开的窗口不生效,需要重新打开。`n- 如果需要自定义,请前往「自定义」页面配置。") - g.AddText(, "1. 当前输入法模式: ") - gc.mode := g.AddDropDownList("yp AltSubmit vmode", gc.imList) - gc.mode.OnEvent("Change", fn_change_mode) - fn_change_mode(item, *) { - if (item.Value = 1) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.customModeGui) { - gc.w.customModeGui.Destroy() - gc.w.customModeGui := "" - } - gc.mode.Value := mode + 1 - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 - g.AddText("cRed", "请前往「自定义」配置页面中设置,此处无法直接修改") - g.AddText("cRed", "在配置页面的左上角,「基础配置」的右边") - y := g.AddButton("w" bw, "我知道了") - y.OnEvent("Click", yes) - y.Focus() - g.OnEvent("Close", yes) - yes(*) { - g.Destroy() - } - gc.w.customModeGui := g - return g - } - } else { - switch (item.Value) { - case 2: - { - writeIni("statusModeEN", "", "InputMethod") - writeIni("conversionModeEN", "", "InputMethod") - gc.statusModeEN.Value := "" - gc.conversionModeEN.Value := "" - statusModeEN := "" - conversionModeEN := "" - } - case 3: - { - ; 讯飞输入法 - ; 中文时状态码为 2 - ; 英文时状态码为 1 - ; 切换码无规律不唯一 - writeIni("statusModeEN", ":1:", "InputMethod") - writeIni("conversionModeEN", "", "InputMethod") - gc.statusModeEN.Value := "1" - gc.conversionModeEN.Value := "" - statusModeEN := ":1:" - conversionModeEN := "" - } - case 4: - { - ; 手心输入法: - ; 中文时切换码为 1025 - ; 英文时切换码为 1 - ; 状态码一直为 1 - writeIni("statusModeEN", "", "InputMethod") - writeIni("conversionModeEN", ":1:", "InputMethod") - gc.statusModeEN.Value := "" - gc.conversionModeEN.Value := "1" - statusModeEN := "" - conversionModeEN := ":1:" - } - } - writeIni("mode", gc.mode.Value - 1, "InputMethod") - mode := readIni("mode", gc.mode.Value - 1, "InputMethod") - restartJetBrains() - } - } - gc.mode.Value := mode + 1 + g.AddText("Section cRed", "如果【通用】模式不可用,需要前往「自定义」标签页去配置【自定义】模式") + g.AddText(, "1. 当前使用的输入法模式:") + gc.mode := g.AddText("yp cRed w" w / 2) + gc.mode.Value := gc.modeList[mode + 1] g.AddText("xs", "2. 设置获取输入法状态的超时时间: ") timeout := g.AddEdit("yp Number Limit5 vcheckTimeout", "") + timeout.Focus() timeout.OnEvent("Change", fn_change_timeout) fn_change_timeout(item, *) { if (item.value != "") { @@ -109,8 +42,8 @@ fn_input_mode(*) { } } timeout.Value := checkTimeout - g.AddEdit("xs ReadOnly cGray -VScroll w" w, "单位:毫秒,默认 500 毫秒。`n每次切换输入法状态,InputTip 会从系统获取新的输入法状态。`n如果超过了这个时间,则认为获取失败,直接显示英文状态。`n它可能是有时识别不到输入法状态的原因,可以尝试调节它。") - g.AddText("xs", "3. Shift 按键是否可以切换输入法状态") + g.AddEdit("xs ReadOnly cGray -VScroll w" w, "单位:毫秒,默认 500 毫秒。`n每次切换输入法状态,InputTip 会从系统获取新的输入法状态。`n如果超过了这个时间,则认为获取失败,直接显示英文状态。`n它可能是有时识别不到输入法状态的原因,遇到问题可以尝试调节它。") + g.AddText("xs", "3. Shift 按键是否可以正常切换输入法状态") gc.useShift := g.AddDropDownList("yp vuseShift Choose" useShift + 1, ["【否】(慎重选择)", "【是】"]) gc.useShift.OnEvent("Change", fn_change_useShift) fn_change_useShift(item, *) { @@ -127,7 +60,7 @@ fn_input_mode(*) { bw := w - g.MarginX * 2 g.AddText("cRed", "确定要使用【否】吗?") g.AddText("cRed", "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘或部分特殊输入法中,可能会导致状态提示间歇性错误。") - g.AddText("cRed", "更建议不要使用【否】,而是启用 Shift 切换状态,这也是几乎所有输入法的默认设置。") + g.AddText("cRed", "建议不要使用【否】,而是启用 Shift 切换状态,这也是几乎所有输入法的默认设置。") g.AddButton("w" bw, "我确定要使用【否】").OnEvent("Click", yes) g.AddButton("w" bw, "不,我只是误点了").OnEvent("Click", no) g.OnEvent("Close", no) @@ -152,30 +85,22 @@ fn_input_mode(*) { } g.AddEdit("xs ReadOnly cGray -VScroll w" w, "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘或部分特殊输入法中,可能会导致状态提示间歇性错误。") tab.UseTab(2) + + g.AddText("Section ReadOnly cRed -VScroll w" w, "首先需要点击上方的「关于自定义」标签页,查看帮助说明,了解如何设置") + g.AddText("Section", "优先级顺序: 切换码规则(4) > 切换码数字(3) > 状态码规则(2) > 状态码数字(1)") + g.AddText("xs cGray", "输入框中有值的或规则有勾选的,取其中优先级最高的生效`n如果都没有设置或勾选,则自动变回【通用】模式,反之变为【自定义】模式") + g.AddText("Section", "1.") g.AddText("yp cRed", "英文状态") - g.AddText("yp", "时应该返回的") - g.AddText("yp cRed", "状态码") - g.AddText("yp", ": ") - gc.statusModeEN := g.AddEdit("yp vstatusMode w" 100, "") + g.AddText("yp", "的状态码数字: ") + gc.statusModeEN := g.AddEdit("yp vstatusMode", "") gc.statusModeEN.Value := Trim(StrReplace(statusModeEN, ":", " ")) gc.statusModeEN.OnEvent("Change", fn_change_statusModeEN) fn_change_statusModeEN(item, *) { if (Trim(item.Value) = "") { - if (conversionModeEN = "") { - ; 如果状态码和切换码都为空,则恢复到通用模式 - writeIni("mode", 1, "InputMethod") - mode := 1 - gc.mode.Value := 2 - } writeIni("statusModeEN", "", "InputMethod") statusModeEN := "" } else { - if (mode != 0) { - writeIni("mode", 0, "InputMethod") - mode := 0 - gc.mode.Value := 1 - } value := ":" for v in StrSplit(item.value, " ") { value .= v ":" @@ -183,32 +108,71 @@ fn_input_mode(*) { writeIni("statusModeEN", value, "InputMethod") statusModeEN := value } + checkModeChange() restartJetBrains() } + checkModeChange() { + if (gc.statusModeEN.Value = "" && gc.conversionModeEN.Value = "" && evenStatusModeEN = "" && evenConversionModeEN = "") { + gc.mode.Value := gc.modeList[2] + if (mode != 1) { + writeIni("mode", 1, "InputMethod") + global mode := 1 + } + } else { + gc.mode.Value := gc.modeList[1] + if (mode != 0) { + writeIni("mode", 0, "InputMethod") + global mode := 0 + } + } + } + + handle_mode(v, c, box, d) { + if (v) { + gc.%box%.Value := 0 + writeIni(c, d, "InputMethod") + } else { + if (!gc.%box%.Value) { + writeIni(c, "", "InputMethod") + } + } + global evenStatusModeEN := readIni("evenStatusModeEN", "", "InputMethod") + global evenConversionModeEN := readIni("evenConversionModeEN", "", "InputMethod") + checkModeChange() + restartJetBrains() + } + g.AddText("xs", "2.") g.AddText("yp cRed", "英文状态") - g.AddText("yp", "时应该返回的") - g.AddText("yp cRed", "切换码") - g.AddText("yp", ": ") - gc.conversionModeEN := g.AddEdit("yp vconversionMode w" 100, "") + g.AddText("yp", "的状态码规则: ") + gc.oddStatusMode := g.AddCheckbox("yp", "使用奇数") + if (evenStatusModeEN != "") { + gc.oddStatusMode.Value := !evenStatusModeEN + } + gc.oddStatusMode.OnEvent("Click", fn_oddStatusMode) + fn_oddStatusMode(item, *) { + handle_mode(item.Value, "evenStatusModeEN", "evenStatusMode", 0) + } + gc.evenStatusMode := g.AddCheckbox("yp", "使用偶数") + if (evenStatusModeEN != "") { + gc.evenStatusMode.Value := evenStatusModeEN + } + gc.evenStatusMode.OnEvent("Click", fn_evenStatusMode) + fn_evenStatusMode(item, *) { + handle_mode(item.Value, "evenStatusModeEN", "oddStatusMode", 1) + } + + g.AddText("xs", "3.") + g.AddText("yp cRed", "英文状态") + g.AddText("yp", "的切换码数字: ") + gc.conversionModeEN := g.AddEdit("yp vconversionMode", "") gc.conversionModeEN.Value := Trim(StrReplace(conversionModeEN, ":", " ")) gc.conversionModeEN.OnEvent("Change", fn_change_conversionModeEN) fn_change_conversionModeEN(item, *) { if (Trim(item.Value) = "") { - if (statusModeEN = "") { - ; 如果状态码和切换码都为空,则恢复到通用模式 - writeIni("mode", 1, "InputMethod") - mode := 1 - gc.mode.Value := 2 - } writeIni("conversionModeEN", "", "InputMethod") conversionModeEN := "" } else { - if (mode != 0) { - writeIni("mode", 0, "InputMethod") - mode := 0 - gc.mode.Value := 1 - } value := ":" for v in StrSplit(item.value, " ") { value .= v ":" @@ -216,9 +180,31 @@ fn_input_mode(*) { writeIni("conversionModeEN", value, "InputMethod") conversionModeEN := value } + checkModeChange() restartJetBrains() } - gc.status_btn := g.AddButton("xs w" bw, "显示实时的状态码和切换码") + + g.AddText("xs", "4.") + g.AddText("yp cRed", "英文状态") + g.AddText("yp", "的切换码规则: ") + gc.oddConversionMode := g.AddCheckbox("yp", "使用奇数") + if (evenConversionModeEN != "") { + gc.oddConversionMode.Value := !evenConversionModeEN + } + gc.oddConversionMode.OnEvent("Click", fn_oddConversionMode) + fn_oddConversionMode(item, *) { + handle_mode(item.Value, "evenConversionModeEN", "evenConversionMode", 0) + } + gc.evenConversionMode := g.AddCheckbox("yp", "使用偶数") + if (evenConversionModeEN != "") { + gc.evenConversionMode.Value := evenConversionModeEN + } + gc.evenConversionMode.OnEvent("Click", fn_evenConversionMode) + fn_evenConversionMode(item, *) { + handle_mode(item.Value, "evenConversionModeEN", "oddConversionMode", 1) + } + + gc.status_btn := g.AddButton("xs w" w, "显示实时的状态码和切换码") gc.status_btn.OnEvent("Click", showStatus) showStatus(*) { if (gc.timer) { @@ -242,7 +228,11 @@ fn_input_mode(*) { ToolTip("状态码: " info.statusMode "`n切换码: " info.conversionMode) } } - g.AddEdit("xs r10 ReadOnly cGray w" w, "1. 当点击按钮「显示实时的状态码和切换码」之后,在鼠标位置会实时显示当前的状态码和切换码。`n2. 你需要来回切换输入法中英文状态进行观察,如果不同状态时的值是唯一的,就将它填入对应的输入框中。`n3. 英文状态时的状态码和切换码在不同窗口可能不同,但只要是唯一的,就应该被填写,多个就用空格分割。`n`n举个例子: `n假如当你切换到英文后,状态码显示 0,切换码显示 1025。`n切换到中文后,状态码显示 1,切换码显示 1025。`n换到另一个窗口后又发现,英文时状态码显示 3,切换码显示 1025,中文时状态码显示 4,切换码显示 1025。`n可以发现,英文的状态码 0 和 3 是唯一的,没有在中文状态时出现,因此当状态码是它们时,可以确定当前一定是英文状态,像这样的就应该将它们填入状态码输入框中,用空格分割,即 0 3`n而切换码相反,中英文状态时都为 1025,没有办法通过 1025 去判断当前是中文还是英文,就不填切换码,保持切换码为空。") + + tab.UseTab(3) + g.AddEdit("Section r12 ReadOnly w" w, "如何配置【自定义】模式?以讯飞输入法为例:`n1. 点击按钮「显示实时的状态码和切换码」,它会在光标处显示状态码和切换码。`n2. 来回切换输入法的中英文状态观察它们的变化。`n3. 会发现切换码始终为 1,而状态码在英文时为 1,中文时为 2。`n4. 于是,在状态码数字的输入框中填入 1,就会发现已经生效了。`n5. 这里更推荐勾选状态码规则中的「使用奇数」,它包含 1,且范围更大。`n6. 再比如小狼毫(rime)输入法,按照同样的操作流程,你会发现很大的不同。`n7. 它的状态码始终为 1,而切换码在英文时是随机的偶数,中文时是随机的奇数。`n8. 于是,勾选切换码规则中的「使用偶数」后,就会发现已经生效了。`n9. 当然,不要盲目的使用规则扩大范围,比如手心输入法就不能这样做。`n10. 当使用手心输入法按照同样的流程操作时,你会发现又有不同。`n11. 手心输入法的状态码始终为 1,而切换码在英文时为 1,中文时为 1025。`n12. 于是,在状态码数字的输入框中填入 1,就会发现已经生效了。`n13. 但是,这里就不能勾选「使用奇数」,因为中文时的 1025 也是奇数。`n14. 【自定义】模式是靠唯一的值去区分状态,勾选「使用奇数」就无法区分了。`n`n什么是优先级顺序?`n1. 优先级顺序: 切换码规则(4) > 切换码数字(3) > 状态码规则(2) > 状态码数字(1)`n2. 对于【自定义】模式来说,生效的是优先级最高的配置项。`n3. 比如: 你使用了切换码规则,则切换码数字/状态码规则/状态码数字即使有值,也无效。`n`n在数字输入框中,是可以填入许多个的:`n1. 有可能你会遇到这样的情况。`n2. 你发现状态码在英文时不唯一,有时为 0,有时为 3,在中文时为 1。`n3. 这种情况,一个奇数,一个偶数,也无法使用规则。`n4. 你可以直接在状态码数字的输入框中填入它们,以空格分割即可。") + + g.AddLink(, '此处的帮助说明无法动态更新,建议前往 官网 查看最新的观感更好的帮助说明文档') g.OnEvent("Close", fn_close) fn_close(*) { diff --git a/src/v2/menu/tray-menu.ahk b/src/v2/menu/tray-menu.ahk index 0210440..48edd55 100644 --- a/src/v2/menu/tray-menu.ahk +++ b/src/v2/menu/tray-menu.ahk @@ -17,7 +17,7 @@ makeTrayMenu() { if (isStartUp) { A_TrayMenu.Check("开机自启动") } - A_TrayMenu.Add("设置更新检测", fn_check_update) + A_TrayMenu.Add("设置更新检查", fn_check_update) A_TrayMenu.Add("设置输入法模式", fn_input_mode) A_TrayMenu.Add("设置光标获取模式", fn_cursor_mode) A_TrayMenu.Add("符号显示黑/白名单", fn_bw_list) diff --git a/src/v2/utils/IME.ahk b/src/v2/utils/IME.ahk index 4041a9d..429e4df 100644 --- a/src/v2/utils/IME.ahk +++ b/src/v2/utils/IME.ahk @@ -1,37 +1,61 @@ /** * @link https://github.com/Tebayaki/AutoHotkeyScripts/blob/main/lib/IME.ahk - * @Tip 有所修改,外部必须提供变量 checkTimeout,statusModeEN,conversionModeEN + * @Tip 有所修改,外部必须提供变量 checkTimeout,statusModeEN,conversionModeEN,evenStatusModeEN,evenConversionModeEN * @example * statusModeEN := 0 ; 英文状态时的状态码 * conversionModeEN := 0 ; 英文状态时的转换码 + * evenStatusModeEN := "" + * evenConversionModeEN := "" * checkTimeout := 1000 ; 超时时间 单位:毫秒 * IME.GetInputMode() ; 获取当前输入法输入模式 * IME.SetInputMode(!IME.GetInputMode()) ; 切换当前输入法输入模式 */ class IME { static GetInputMode(hwnd := this.GetFocusedWindow()) { - if (statusModeEN = "") { - if !this.GetOpenStatus(hwnd) { + if (statusModeEN = "" && evenStatusModeEN = "" && conversionModeEN = "" && evenConversionModeEN = "") { + if (!this.GetOpenStatus(hwnd)) { return { code: 0, isCN: 0 } } - } else { + + v := this.GetConversionMode(hwnd) return { - code: 0, - isCN: !(InStr(statusModeEN, ":" this.GetOpenStatus(hwnd) ":")) + code: v, + isCN: v & 1 + } + } + + ; 切换码 + v := this.GetConversionMode(hwnd) + flag := v & 1 + if (evenConversionModeEN != "") { + return { + code: v, + isCN: evenConversionModeEN ? flag : !flag } } - if (conversionModeEN = "") { + if (conversionModeEN != "") { return { - code: this.GetConversionMode(hwnd), - isCN: this.GetConversionMode(hwnd) & 1 + code: v, + isCN: !(InStr(conversionModeEN, ":" v ":")) } - } else { + } + + ; 状态码 + v := this.GetOpenStatus(hwnd) + flag := v & 1 + if (evenStatusModeEN != "") { + return { + code: v, + isCN: evenStatusModeEN ? flag : !flag + } + } + if (statusModeEN != "") { return { - code: this.GetConversionMode(hwnd), - isCN: !(InStr(conversionModeEN, ":" this.GetConversionMode(hwnd) ":")) + code: 0, + isCN: !(InStr(statusModeEN, ":" v ":")) } } } diff --git a/src/v2/utils/check-version.ahk b/src/v2/utils/check-version.ahk index cf5408a..4db2ed1 100644 --- a/src/v2/utils/check-version.ahk +++ b/src/v2/utils/check-version.ahk @@ -265,22 +265,14 @@ checkUpdateDone() { case 3: { ; 讯飞输入法 - ; 中文时状态码为 2 - ; 英文时状态码为 1 - ; 切换码无规律不唯一 - writeIni("statusModeEN", ":1:", "InputMethod") - writeIni("conversionModeEN", "", "InputMethod") - writeIni("mode", 2, "InputMethod") + writeIni("evenStatusModeEN", "0", "InputMethod") + writeIni("mode", 0, "InputMethod") } case 4: { - ; 手心输入法: - ; 中文时切换码为 1025 - ; 英文时切换码为 1 - ; 状态码一直为 1 - writeIni("statusModeEN", "", "InputMethod") + ; 手心输入法 writeIni("conversionModeEN", ":1:", "InputMethod") - writeIni("mode", 3, "InputMethod") + writeIni("mode", 0, "InputMethod") } } border_type := readIni('border_type', 1) diff --git a/src/v2/utils/show.ahk b/src/v2/utils/show.ahk index a39b3b2..369ea54 100644 --- a/src/v2/utils/show.ahk +++ b/src/v2/utils/show.ahk @@ -1,16 +1,19 @@ updateDelay() +; 鼠标悬浮在符号上 +isOverSymbol := 0 while 1 { Sleep(delay) ; 正在使用鼠标或有键盘操作 if (A_TimeIdle < leaveDelay) { needShow := 1 - ; if (symbolType) { - ; if (isMouseOver("abgox-InputTip-Symbol-Window")) { - ; hideSymbol() - ; continue - ; } - ; } + if (symbolType) { + if (isMouseOver("abgox-InputTip-Symbol-Window")) { + hideSymbol() + isOverSymbol := 1 + continue + } + } try { exe_name := ProcessGetName(WinGetPID("A")) exe_str := ":" exe_name ":" @@ -141,12 +144,14 @@ loadCursor(type, change := 0) { } } loadSymbol(type, left, top) { - global lastSymbol - static old_top := 0 - static old_left := 0 - - if (type = lastSymbol && left = old_left && top = old_top) { - return + global lastSymbol, isOverSymbol + static old_left := 0, old_top := 0 + if (left = old_left && top = old_top) { + if (type = lastSymbol || isOverSymbol) { + return + } + } else { + isOverSymbol := 0 } hideSymbol() diff --git a/src/v2/utils/var.ahk b/src/v2/utils/var.ahk index 15af1eb..8921ce0 100644 --- a/src/v2/utils/var.ahk +++ b/src/v2/utils/var.ahk @@ -4,8 +4,15 @@ fz := "s" readIni("gui_font_size", "12") ; 输入法模式 mode := readIni("mode", 1, "InputMethod") +; 指定的英文状态码 statusModeEN := readIni("statusModeEN", "", "InputMethod") +; 指定的英文切换码 conversionModeEN := readIni("conversionModeEN", "", "InputMethod") + +; 是否使用偶数 +evenStatusModeEN := readIni("evenStatusModeEN", "", "InputMethod") +evenConversionModeEN := readIni("evenConversionModeEN", "", "InputMethod") + checkTimeout := readIni("checkTimeout", 500, "InputMethod") ; 是否使用 Shift 键切换输入法状态 From 80ded39e8e21655c942fc184dcbe66e2201ea747 Mon Sep 17 00:00:00 2001 From: abgox Date: Mon, 13 Jan 2025 19:30:13 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=E6=96=87=E6=9C=AC=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E4=B8=AD=E6=89=80=E6=9C=89=E9=85=8D=E7=BD=AE=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=EF=BC=8C=E4=B8=8D=E5=86=8D=E4=BE=9D=E8=B5=96=E6=96=B9?= =?UTF-8?q?=E5=9D=97=E7=AC=A6=E5=8F=B7=E4=B8=AD=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v2/CHANGELOG.md | 4 +- src/v2/menu/config.ahk | 296 ++++++++++++--------------------- src/v2/utils/check-version.ahk | 12 ++ src/v2/utils/show.ahk | 26 +-- src/v2/utils/var.ahk | 118 +++++++------ 5 files changed, 197 insertions(+), 259 deletions(-) diff --git a/src/v2/CHANGELOG.md b/src/v2/CHANGELOG.md index f445375..45d6c86 100644 --- a/src/v2/CHANGELOG.md +++ b/src/v2/CHANGELOG.md @@ -7,8 +7,10 @@ - 当鼠标悬浮在符号上时,符号立即隐藏 - 此功能在 `2.28.0` 中由于存在问题被移除,现在重新添加 - 将 `设置输入法模式` 中的 `讯飞输入法` 和 `手心输入法` 模式合并到 `自定义` 中 - - 现在只有两个模式,`通用` 和 `自定义` + - 现在只有两个模式: `通用` 和 `自定义` - 在 `自定义` 中,添加了 `状态码规则` 和 `切换码规则` +- 文本符号中所有配置独立,不再依赖方块符号中的配置 + - `2.31.0` 之前的版本,文本符号的透明度、偏移量、边框样式、背景颜色由方块符号中的相同配置决定 - 其他的修复和优化 ## 2.30.2 diff --git a/src/v2/menu/config.ahk b/src/v2/menu/config.ahk index c1d7390..3762907 100644 --- a/src/v2/menu/config.ahk +++ b/src/v2/menu/config.ahk @@ -8,27 +8,25 @@ fn_config(*) { gc.w.subGui := "" } } - line := "-----------------------------------------------------------------------------------------------" + line := "-------------------------------------------------------------------------------------------------------------" configGui := Gui("AlwaysOnTop") configGui.SetFont(fz, "微软雅黑") - configGui.AddText(, line) + configGui.AddText(, "-------------------------------------------------------------------------------------------------------") configGui.Show("Hide") configGui.GetPos(, , &Gui_width) configGui.Destroy() configGui := Gui("AlwaysOnTop", "InputTip - 更改配置") configGui.SetFont(fz, "微软雅黑") + + bw := Gui_width - configGui.MarginX * 2 ; tab := configGui.AddTab3("-Wrap 0x100", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号", "配色网站"]) tab := configGui.AddTab3("-Wrap", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号", "其他杂项", "配色网站"]) tab.UseTab(1) - configGui.AddText("Section cRed", "在更改配置前,你应该首先阅读一下相关的说明文档") - configGui.AddLink("xs", '官网') - configGui.AddLink("yp", 'Github') - configGui.AddLink("yp", 'Gitee') - configGui.AddLink("yp", '一些常见的使用问题') + configGui.AddLink("Section cRed", '你首先应该查看相关的说明文档: 官网 Github Gitee 一些常见的使用问题') - configGui.AddText("xs cRed", "所有的配置项的更改会实时生效,你可以立即看到最新效果") + configGui.AddText("xs cGray", "所有的配置项修改会实时生效,可以立即看到最新效果,但是更改时不要太快`n比如需要输入值的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要放缓输入速度") configGui.AddText("xs", line) configGui.AddText("xs", "1. 要不要同步修改鼠标样式: ") _g := configGui.AddDropDownList("w" Gui_width / 1.6 " yp AltSubmit Choose" changeCursor + 1, ["【否】不要修改鼠标样式,保持原本的鼠标样式", "【是】需要修改鼠标样式,随输入法状态而变化"]) @@ -81,6 +79,7 @@ fn_config(*) { configGui.addText("xs", "2. 在输入光标附近显示什么类型的符号: ") configGui.AddDropDownList("yp AltSubmit Choose" symbolType + 1, ["不显示符号", "显示图片符号", "显示方块符号", "显示文本符号"]).OnEvent("Change", fn_symbol_type) + configGui.AddText("xs cGray", "当鼠标悬浮在符号上时,符号会立即隐藏,下次键盘操作或光标位置变化时再次显示") fn_symbol_type(item, *) { writeIni("symbolType", item.Value - 1) global symbolType := item.Value - 1 @@ -158,24 +157,7 @@ fn_config(*) { _g := configGui.AddDropDownList("xs r9 w" Gui_width " v" v.type "_cursor", dirList) _g.OnEvent("Change", fn_cursor_dir) fn_cursor_dir(item, *) { - if (item.Text = "") { - return - } writeIni(item.Name, item.Text) - switch (item.Name) { - case "CN_cursor": - { - global CN_cursor := item.Text - } - case "EN_cursor": - { - global EN_cursor := item.Text - } - case "Caps_cursor": - { - global Caps_cursor := item.Text - } - } updateCursor() reloadCursor() } @@ -232,34 +214,11 @@ fn_config(*) { _g.OnEvent("Change", fn_pic_config) fn_pic_config(item, *) { - value := returnNumber(item.Value) - writeIni(item.Name, value) - switch (item.Name) { - case "pic_offset_x": - { - global pic_offset_x := value - restartJetBrains() - } - case "pic_offset_y": - { - global pic_offset_y := value - restartJetBrains() - } - case "pic_symbol_width": - { - global pic_symbol_width := value - hideSymbol() - updateSymbol() - reloadSymbol() - } - case "pic_symbol_height": - { - global pic_symbol_height := value - hideSymbol() - updateSymbol() - reloadSymbol() - } - } + writeIni(item.Name, returnNumber(item.Value)) + hideSymbol() + updateSymbol() + reloadSymbol() + restartJetBrains() } } @@ -277,20 +236,6 @@ fn_config(*) { _g.OnEvent("Change", fn_pic_path) fn_pic_path(item, *) { writeIni(item.Name, item.Text) - switch (item.Name) { - case "CN_pic": - { - global CN_pic := item.Text - } - case "EN_pic": - { - global EN_pic := item.Text - } - case "Caps_pic": - { - global Caps_pic := item.Text - } - } hideSymbol() updateSymbol() reloadSymbol() @@ -340,7 +285,7 @@ fn_config(*) { symbolBlockConfig := [{ config: "transparent", options: "Number Limit3", - tip: "方块符号的透明度" + tip: "方块符号的方块透明度" }, { config: "offset_x", options: "", @@ -362,179 +307,150 @@ fn_config(*) { for v in symbolBlockColorConfig { configGui.AddText("xs", v.tip ": ") _g := configGui.AddComboBox("v" v.config " yp " v.options, v.colors) + _g.Text := readIni(v.config, "red") _g.OnEvent("Change", fn_color_config) fn_color_config(item, *) { - value := item.Text - writeIni(item.Name, value) - switch (item.Name) { - case "CN_color": - { - global CN_color := value - } - case "EN_color": - { - global EN_color := value - } - case "Caps_color": - { - global Caps_color := value - } - } + writeIni(item.Name, item.Text) hideSymbol() updateSymbol() reloadSymbol() } - _g.Text := readIni(v.config, "red") } for v in symbolBlockConfig { configGui.AddText("xs", v.tip ": ") - if (v.config = "transparent") { - _g := configGui.AddEdit("v" v.config " yp " v.options) - _g.Value := readIni(v.config, 1) - _g.OnEvent("Change", fn_trans_config) - fn_trans_config(item, *) { - value := item.Text + _g := configGui.AddEdit("v" v.config " yp " v.options) + _g.Value := readIni(v.config, 1) + _g.OnEvent("Change", fn_block_config) + fn_block_config(item, *) { + value := item.Value + if (item.Name = "transparent") { if (value = "") { return } if (value > 255) { value := 255 } - writeIni(item.Name, value) - hideSymbol() - updateSymbol() - reloadSymbol() - } - } else { - _g := configGui.AddEdit("v" v.config " yp " v.options) - _g.Value := readIni(v.config, 1) - _g.OnEvent("Change", fn_block_config) - fn_block_config(item, *) { - value := returnNumber(item.Text) - writeIni(item.Name, value) - switch (item.Name) { - case "transparent": - { - global transparent := value - } - case "offset_x": - { - global offset_x := value - } - case "offset_y": - { - global offset_y := value - } - case "symbol_height": - { - global symbol_height := value - } - case "symbol_width": - { - global symbol_width := value - } - } - hideSymbol() - updateSymbol() - reloadSymbol() } + writeIni(item.Name, returnNumber(value)) + hideSymbol() + updateSymbol() + reloadSymbol() } } symbolStyle := ["无", "样式1", "样式2", "样式3"] - configGui.AddText("xs", "边框样式: ") + configGui.AddText("xs", "方块符号的边框样式: ") _g := configGui.AddDropDownList("yp AltSubmit vborder_type", symbolStyle) + _g.Value := readIni("border_type", "") + 1 _g.OnEvent("Change", fn_border_config) fn_border_config(item, *) { - value := item.Value - writeIni("border_type", value - 1) - global border_type := value - 1 + writeIni("border_type", item.Value - 1) hideSymbol() updateSymbol() reloadSymbol() } - _g.Value := readIni("border_type", "") + 1 tab.UseTab(5) + configGui.AddText("Section", "1. 不同状态时显示的文本字符可以设置为空,表示不显示对应的文本字符") + configGui.AddText("xs", "2. 当方块符号中的背景颜色设置为空时,对应的文本字符也不显示`n" line) symbolCharConfig := [{ + config: "CN_Text", + opts: "xs", + options: "", + tip: "中文状态的文本字符" + }, { + config: "charSymbol_CN_color", + opts: "yp", + options: "", + tip: "中文状态的背景颜色" + }, { + config: "EN_Text", + opts: "xs", + options: "", + tip: "英文状态的文本字符" + }, { + config: "charSymbol_EN_color", + opts: "yp", + options: "", + tip: "英文状态的背景颜色" + }, { + config: "Caps_Text", + opts: "xs", + options: "", + tip: "大写锁定的文本字符" + }, { + config: "charSymbol_Caps_color", + opts: "yp", + options: "", + tip: "大写锁定的背景颜色" + }, { config: "font_family", + opts: "xs", options: "", - tip: "文本字符的字体" + tip: "文本符号的字符字体" }, { config: "font_size", + opts: "yp", options: "Number", - tip: "文本字符的大小" + tip: "文本符号的字符大小" }, { config: "font_weight", + opts: "xs", options: "Number", - tip: "文本字符的粗细" + tip: "文本符号的字符粗细" }, { config: "font_color", + opts: "yp", options: "", - tip: "文本字符的颜色" + tip: "文本符号的字符颜色" }, { - config: "CN_Text", - options: "", - tip: "中文状态时显示的文本字符" + config: "charSymbol_transparent", + opts: "xs", + options: "Number Limit3", + tip: "文本符号的字符透明度" }, { - config: "EN_Text", + config: "charSymbol_offset_x", + opts: "xs", options: "", - tip: "英文状态时显示的文本字符" + tip: "文本符号的水平偏移量" }, { - config: "Caps_Text", + config: "charSymbol_offset_y", + opts: "xs", options: "", - tip: "大写锁定时显示的文本字符" + tip: "文本符号的垂直偏移量" }] - configGui.AddText("Section cRed", "1. 符号偏移量、透明度、边框样式以及不同状态下的背景颜色由方块符号中的相关配置决定") - configGui.AddText("xs", "2. 不同状态时显示的文本字符可以设置为空,表示不显示对应的文本字符") - configGui.AddText("xs", "3. 当方块符号中的背景颜色设置为空时,对应的文本字符也不显示`n" line) for v in symbolCharConfig { - configGui.AddText("xs", v.tip ": ") + configGui.AddText(v.opts, v.tip ": ") _g := configGui.AddEdit("v" v.config " yp " v.options) _g.Value := %v.config% _g.OnEvent("Change", fn_char_config) - - fn_char_config(item, *) { - value := item.Text - switch (item.Name) { - case "font_family": - { - global font_family := value - } - case "font_size": - { - if (value = "") { - return - } - global font_size := value - } - case "font_weight": - { - if (value = "") { - return - } - global font_weight := value - } - case "font_color": - { - global font_color := value - } - case "CN_Text": - { - global CN_Text := value - } - case "EN_Text": - { - global EN_Text := value - } - case "Caps_Text": - { - global Caps_Text := value - } + } + fn_char_config(item, *) { + value := item.Value + if (item.Name = "charSymbol_transparent") { + if (value = "") { + return } - writeIni(item.Name, value) - hideSymbol() - updateSymbol() - reloadSymbol() + if (value > 255) { + value := 255 + } + } else if (item.Name = "charSymbol_offset_x" || item.Name = "charSymbol_offset_y") { + value := returnNumber(value) } + writeIni(item.Name, value) + hideSymbol() + updateSymbol() + reloadSymbol() + } + + symbolStyle := ["无", "样式1", "样式2", "样式3"] + configGui.AddText("xs", "文本符号的边框样式: ") + _g := configGui.AddDropDownList("yp AltSubmit vcharSymbol_border_type", symbolStyle) + _g.Value := readIni("charSymbol_border_type", "") + 1 + _g.OnEvent("Change", fn_border_config2) + fn_border_config2(item, *) { + writeIni("charSymbol_border_type", item.Value - 1) + hideSymbol() + updateSymbol() + reloadSymbol() } tab.UseTab(6) configGui.AddText("Section", "1. 所有配置菜单的字体大小: ") diff --git a/src/v2/utils/check-version.ahk b/src/v2/utils/check-version.ahk index 4db2ed1..c5df726 100644 --- a/src/v2/utils/check-version.ahk +++ b/src/v2/utils/check-version.ahk @@ -281,6 +281,18 @@ checkUpdateDone() { } } + try { + IniRead("InputTip.ini", "Config-v2", "charSymbol_CN_color") + } catch { + writeIni("charSymbol_CN_color", readIni("CN_color", "red")) + writeIni("charSymbol_EN_color", readIni("EN_color", "blue")) + writeIni("charSymbol_Caps_color", readIni("Caps_color", "green")) + writeIni("charSymbol_transparent", readIni('transparent', 222)) + writeIni("charSymbol_offset_x", readIni('offset_x', 10)) + writeIni("charSymbol_offset_y", readIni('offset_y', -30)) + writeIni("charSymbol_border_type", readIni('border_type', 1)) + } + createGui(fn).Show() fn(x, y, w, h) { g := Gui("AlwaysOnTop", "InputTip - 版本更新完成") diff --git a/src/v2/utils/show.ahk b/src/v2/utils/show.ahk index 369ea54..400daea 100644 --- a/src/v2/utils/show.ahk +++ b/src/v2/utils/show.ahk @@ -130,24 +130,24 @@ updateDelay() { } } } -loadCursor(type, change := 0) { +loadCursor(state, change := 0) { global lastCursor if (changeCursor) { - if (type != lastCursor || change) { + if (state != lastCursor || change) { for v in cursorInfo { - if (v.%type%) { - DllCall("SetSystemCursor", "Ptr", DllCall("LoadCursorFromFile", "Str", v.%type%, "Ptr"), "Int", v.value) + if (v.%state%) { + DllCall("SetSystemCursor", "Ptr", DllCall("LoadCursorFromFile", "Str", v.%state%, "Ptr"), "Int", v.value) } } - lastCursor := type + lastCursor := state } } } -loadSymbol(type, left, top) { +loadSymbol(state, left, top) { global lastSymbol, isOverSymbol static old_left := 0, old_top := 0 if (left = old_left && top = old_top) { - if (type = lastSymbol || isOverSymbol) { + if (state = lastSymbol || (isOverSymbol && A_TimeIdleKeyboard > leaveDelay)) { return } } else { @@ -164,20 +164,20 @@ loadSymbol(type, left, top) { } else if (symbolType = 2) { showConfig .= "w" symbol_width "h" symbol_height "x" left + offset_x "y" top + offset_y } else if (symbolType = 3) { - showConfig .= "x" left + offset_x "y" top + offset_y + showConfig .= "x" left + charSymbol_offset_x "y" top + charSymbol_offset_y } - if (symbolGui.%type%) { - symbolGui.%type%.Show(showConfig) + if (symbolInfo.%"gui_" state%) { + symbolInfo.%"gui_" state%.Show(showConfig) } - lastSymbol := type + lastSymbol := state old_top := top old_left := left } hideSymbol() { - for v in ["CN", "EN", "Caps"] { + for state in ["CN", "EN", "Caps"] { try { - symbolGui.%v%.Hide() + symbolInfo.%"gui_" state%.Hide() } } global lastSymbol := "" diff --git a/src/v2/utils/var.ahk b/src/v2/utils/var.ahk index 8921ce0..a76a3de 100644 --- a/src/v2/utils/var.ahk +++ b/src/v2/utils/var.ahk @@ -171,54 +171,59 @@ updateSymbol(init := 0) { restartJetBrains() } ; 存放不同状态下的符号 - symbolGui := { - EN: "", - CN: "", - Caps: "" + symbolInfo := { + gui_EN: "", + gui_CN: "", + gui_Caps: "" } - ; 图片符号的宽高 + ; * 图片字符相关配置 + ; 宽高 pic_symbol_width := readIni('pic_symbol_width', 9) * A_ScreenDPI / 96 pic_symbol_height := readIni('pic_symbol_height', 9) * A_ScreenDPI / 96 - - ; 图片符号的路径 + ; 文件路径 CN_pic := readIni("CN_pic", "InputTipSymbol\default\CN.png") EN_pic := readIni("EN_pic", "InputTipSymbol\default\EN.png") Caps_pic := readIni("Caps_pic", "InputTipSymbol\default\Caps.png") - - ; 图片符号的偏移量 + ; 偏移量 pic_offset_x := readIni('pic_offset_x', -30) pic_offset_y := readIni('pic_offset_y', -40) - - ; 方块/文本符号的背景颜色 + ; * 方块符号相关配置 + ; 背景颜色 CN_color := StrReplace(readIni("CN_color", "red"), '#', '') EN_color := StrReplace(readIni("EN_color", "blue"), '#', '') Caps_color := StrReplace(readIni("Caps_color", "green"), '#', '') - - ; 方块/文本符号的透明度 + ; 透明度 transparent := readIni('transparent', 222) - - ; 方块/文本符号的偏移量 + ; 偏移量 offset_x := readIni('offset_x', 10) offset_y := readIni('offset_y', -30) - ; 方块符号的宽高 + ; 宽高 symbol_width := readIni('symbol_width', 6) * A_ScreenDPI / 96 symbol_height := readIni('symbol_height', 6) * A_ScreenDPI / 96 - - /* - 边框样式 - 0: 无边框 - 1: 样式1 - 2: 样式2 - 3: 样式3 - */ + ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) border_type := readIni('border_type', 1) - - ; 文本符号相关的配置 + ; * 文本符号相关配置 + ; 背景颜色 + charSymbol_CN_color := StrReplace(readIni("charSymbol_CN_color", "red"), '#', '') + charSymbol_EN_color := StrReplace(readIni("charSymbol_EN_color", "blue"), '#', '') + charSymbol_Caps_color := StrReplace(readIni("charSymbol_Caps_color", "green"), '#', '') + ; 透明度 + charSymbol_transparent := readIni('charSymbol_transparent', 222) + ; 偏移量 + charSymbol_offset_x := readIni('charSymbol_offset_x', 0) + charSymbol_offset_y := readIni('charSymbol_offset_y', 45) + ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) + charSymbol_border_type := readIni('charSymbol_border_type', 1) + ; 字体 font_family := readIni('font_family', '微软雅黑') + ; 字号 font_size := readIni('font_size', 7) + ; 粗细 font_weight := readIni('font_weight', 600) + ; 颜色 font_color := StrReplace(readIni('font_color', 'ffffff'), '#', '') + ; 显示文本 CN_Text := readIni('CN_Text', '中') EN_Text := readIni('EN_Text', '英') Caps_Text := readIni('Caps_Text', '大') @@ -227,56 +232,59 @@ updateSymbol(init := 0) { case 1: { ; 图片字符 - for v in ["CN", "EN", "Caps"] { - if (%v "_pic"%) { - symbolGui.%v% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") - symbolGui.%v%.BackColor := "000000" - WinSetTransColor("000000", symbolGui.%v%) - symbolGui.%v%.AddPicture("w" pic_symbol_width " h" pic_symbol_height, %v "_pic"%) + + for state in ["CN", "EN", "Caps"] { + if (%state "_pic"%) { + symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + symbolInfo.%"gui_" state%.BackColor := "000000" + WinSetTransColor("000000", symbolInfo.%"gui_" state%) + symbolInfo.%"gui_" state%.AddPicture("w" pic_symbol_width " h" pic_symbol_height, %state "_pic"%) } } } case 2: { ; 方块符号 - for v in ["CN", "EN", "Caps"] { - if (%v "_color"%) { - symbolGui.%v% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + + for state in ["CN", "EN", "Caps"] { + if (%state "_color"%) { + symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") WinSetTransparent(transparent) try { - symbolGui.%v%.BackColor := %v "_color"% + symbolInfo.%"gui_" state%.BackColor := %state "_color"% } switch border_type { - case 1: symbolGui.%v%.Opt("-LastFound +e0x00000001") - case 2: symbolGui.%v%.Opt("-LastFound +e0x00000200") - case 3: symbolGui.%v%.Opt("-LastFound +e0x00020000") - default: symbolGui.%v%.Opt("-LastFound") + case 1: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000001") + case 2: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000200") + case 3: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00020000") + default: symbolInfo.%"gui_" state%.Opt("-LastFound") } } } } case 3: { - ; 文本字符 - symbolGui.fontOpt := 's' font_size * A_ScreenDPI / 96 ' c' font_color ' w' font_weight - for v in ["CN", "EN", "Caps"] { - if (%v "_Text"% && %v "_color"%) { - symbolGui.%v% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") - symbolGui.%v%.MarginX := 0, symbolGui.%v%.MarginY := 0 + ; 文本符号 + + symbolInfo.fontOpt := 's' font_size * A_ScreenDPI / 96 ' c' font_color ' w' font_weight + for state in ["CN", "EN", "Caps"] { + if (%state "_Text"%) { + symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + symbolInfo.%"gui_" state%.MarginX := 0, symbolInfo.%"gui_" state%.MarginY := 0 try { - symbolGui.%v%.SetFont(symbolGui.fontOpt, font_family) + symbolInfo.%"gui_" state%.SetFont(symbolInfo.fontOpt, font_family) } - symbolGui.%v%.AddText(, %v "_Text"%) - WinSetTransparent(transparent) + symbolInfo.%"gui_" state%.AddText(, %state "_Text"%) + WinSetTransparent(charSymbol_transparent) try { - symbolGui.%v%.BackColor := %v "_color"% + symbolInfo.%"gui_" state%.BackColor := %"charSymbol_" state "_color"% } - switch border_type { - case 1: symbolGui.%v%.Opt("-LastFound +e0x00000001") - case 2: symbolGui.%v%.Opt("-LastFound +e0x00000200") - case 3: symbolGui.%v%.Opt("-LastFound +e0x00020000") - default: symbolGui.%v%.Opt("-LastFound") + switch charSymbol_border_type { + case 1: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000001") + case 2: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000200") + case 3: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00020000") + default: symbolInfo.%"gui_" state%.Opt("-LastFound") } } } From 03df720ccaeb80b64ef42abc267eae4fec58c4ac Mon Sep 17 00:00:00 2001 From: abgox Date: Mon, 13 Jan 2025 21:00:45 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E3=80=81=E8=8F=9C=E5=8D=95=E4=BC=98=E5=8C=96=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v2/CHANGELOG.md | 4 + src/v2/InputTip.JAB.JetBrains.ahk | 9 +- src/v2/InputTip.ahk | 59 +- src/v2/img/favicon-pause.png | Bin 0 -> 26563 bytes src/v2/img/favicon.ico | Bin 0 -> 67646 bytes src/v2/img/favicon.png | Bin 0 -> 26637 bytes src/v2/menu/JAB.ahk | 48 +- src/v2/menu/about.ahk | 101 +-- src/v2/menu/app-offset.ahk | 308 +++++----- src/v2/menu/bw-list.ahk | 91 +-- src/v2/menu/check-update.ahk | 66 +- src/v2/menu/config.ahk | 992 ++++++++++++++++-------------- src/v2/menu/cursor-mode.ahk | 300 +++++---- src/v2/menu/input-mode.ahk | 177 +++--- src/v2/menu/pause-key.ahk | 167 +++-- src/v2/menu/startup.ahk | 116 ++-- src/v2/menu/switch-key.ahk | 318 +++++----- src/v2/menu/switch-window.ahk | 316 +++++----- src/v2/menu/tray-menu.ahk | 409 ++++++------ src/v2/utils/IME.ahk | 6 +- src/v2/utils/check-version.ahk | 96 +-- src/v2/utils/create-gui.ahk | 45 ++ src/v2/utils/options.ahk | 2 +- src/v2/utils/show.ahk | 2 +- src/v2/utils/var.ahk | 72 ++- src/v2/utils/verify-file.ahk | 81 ++- 26 files changed, 1995 insertions(+), 1790 deletions(-) create mode 100644 src/v2/img/favicon-pause.png create mode 100644 src/v2/img/favicon.ico create mode 100644 src/v2/img/favicon.png create mode 100644 src/v2/utils/create-gui.ahk diff --git a/src/v2/CHANGELOG.md b/src/v2/CHANGELOG.md index 45d6c86..66b9dbf 100644 --- a/src/v2/CHANGELOG.md +++ b/src/v2/CHANGELOG.md @@ -4,6 +4,10 @@ ## 2.31.0 +> [!Tip] +> +> 所有代码完成重构 + - 当鼠标悬浮在符号上时,符号立即隐藏 - 此功能在 `2.28.0` 中由于存在问题被移除,现在重新添加 - 将 `设置输入法模式` 中的 `讯飞输入法` 和 `手心输入法` 模式合并到 `自定义` 中 diff --git a/src/v2/InputTip.JAB.JetBrains.ahk b/src/v2/InputTip.JAB.JetBrains.ahk index b713ec5..c70fcc6 100644 --- a/src/v2/InputTip.JAB.JetBrains.ahk +++ b/src/v2/InputTip.JAB.JetBrains.ahk @@ -2,7 +2,7 @@ #NoTrayIcon ;@AHK2Exe-SetName InputTip.JAB -;@AHK2Exe-SetDescription InputTip(JAB 进程) - 一个输入法状态(中文/英文/大写锁定)提示工具 +;@AHK2Exe-SetDescription InputTip(JAB 进程) - 一个输入法状态提示工具 #Include .\utils\IME.ahk #Include .\utils\ini.ahk @@ -15,7 +15,7 @@ needSkip(exe_str) { } returnCanShowSymbol(&left, &top) { - GetCaretPosFromJetBrains(&left, &top) + GetCaretPosFromJAB(&left, &top) try { left += app_offset.%exe_name%.%isWhichScreen(screenList).num%.x top += app_offset.%exe_name%.%isWhichScreen(screenList).num%.y @@ -27,13 +27,14 @@ returnCanShowSymbol(&left, &top) { /** * Gets the position of the caret with UIA, Acc or CaretGetPos. - * Credit: plankoe (https://www.reddit.com/r/AutoHotkey/comments/ysuawq/get_the_caret_location_in_any_program/) + * @link https://www.reddit.com/r/AutoHotkey/comments/ysuawq/get_the_caret_location_in_any_program/ + * @link https://www.autohotkey.com/boards/viewtopic.php?t=130941#p576439 * @param X Value is set to the screen X-coordinate of the caret * @param Y Value is set to the screen Y-coordinate of the caret * @param W Value is set to the width of the caret * @param H Value is set to the height of the caret */ -GetCaretPosFromJetBrains(&X?, &Y?, &W?, &H?) { +GetCaretPosFromJAB(&X?, &Y?, &W?, &H?) { static JAB := InitJAB() ; Source: https://github.com/Elgin1/Java-Access-Bridge-for-AHK if JAB && (hWnd := WinExist("A")) && DllCall(JAB.module "\isJavaWindow", "ptr", hWnd, "CDecl Int") { if JAB.firstRun diff --git a/src/v2/InputTip.ahk b/src/v2/InputTip.ahk index 3dc2986..56de775 100644 --- a/src/v2/InputTip.ahk +++ b/src/v2/InputTip.ahk @@ -2,20 +2,17 @@ ;@AHK2Exe-SetName InputTip ;@Ahk2Exe-UpdateManifest 1 -;@AHK2Exe-SetDescription InputTip - 一个输入法状态(中文/英文/大写锁定)提示工具 -A_IconTip := "InputTip - 一个输入法状态(中文/英文/大写锁定)提示工具" - -;@Ahk2Exe-AddResource InputTipCursor.zip -;@Ahk2Exe-AddResource InputTip.JAB.JetBrains.exe +;@AHK2Exe-SetDescription InputTip - 一个输入法状态提示工具 +A_IconTip := "当前状态: 【运行中】`nInputTip - 一个输入法状态提示工具" #Include .\utils\ini.ahk #Include .\utils\IME.ahk #Include .\utils\check-version.ahk #Include .\menu\tray-menu.ahk - #Include .\utils\tools.ahk #Include .\utils\app-list.ahk #Include .\utils\verify-file.ahk +#Include .\utils\create-gui.ahk filename := SubStr(A_ScriptName, 1, StrLen(A_ScriptName) - 4) fileLnk := filename ".lnk" @@ -23,8 +20,9 @@ fileLnk := filename ".lnk" ; 注册表: 开机自启动 HKEY_startup := "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run" -; GUI 控件(gui control) gc := { + init: 0, + timer: 0, ; 记录所有的窗口 Gui,同一个 Gui 只允许存在一个 w: { ; 开机自启动 @@ -49,7 +47,7 @@ gc := { appOffsetGui: "", offsetGui: "", ; 启用 JAB/JetBrains IDE 支持 - enableJetBrainsGui: "", + enableJABGui: "", ; 应用列表 blackListGui: "", whiteListGui: "", @@ -59,15 +57,13 @@ gc := { subGui: "", customModeGui: "", shiftSwitchGui: "", - }, - timer: 0 + } } if (A_IsCompiled) { - favicon := A_ScriptFullPath ; 生成特殊的快捷方式,它会通过任务计划程序启动 if (!FileExist(fileLnk)) { - FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , favicon, , , 7) + FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , A_ScriptFullPath, , , 7) } ; 生成任务计划程序 @@ -75,8 +71,7 @@ if (A_IsCompiled) { Run('powershell -NoProfile -Command $action = New-ScheduledTaskAction -Execute "`'\"' A_ScriptFullPath '\"`'";$principal = New-ScheduledTaskPrincipal -UserId "' A_UserName '" -LogonType ServiceAccount -RunLevel Highest;$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -DontStopOnIdleEnd -ExecutionTimeLimit 10 -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1);$task = New-ScheduledTask -Action $action -Principal $principal -Settings $settings;Register-ScheduledTask -TaskName "abgox.InputTip.noUAC" -InputObject $task -Force', , "Hide") } } else { - favicon := A_ScriptDir "\..\favicon.ico" - TraySetIcon(favicon) + TraySetIcon("InputTipSymbol\default\favicon.png", , 1) } checkIni() ; 检查配置文件 @@ -154,34 +149,6 @@ returnCanShowSymbol(&left, &top) { #Include .\utils\show.ahk -/** - * - 用于创建 Gui 对象。 - * - 能够获取窗口最终的坐标和宽高,方便配置控件(如按钮宽度)。 - * @param {Func} fn 一个函数。 - * - 在此函数中正常创建 Gui,但是不能调用 `Show()` 方法,必须返回 Gui 对象。 - * - 函数接受 `4` 个形参(`x`/`y`/`w`/`h`),分别是最终计算得到的窗口坐标和宽高。 - * - `4` 个形参即使不用,也不能省略,否则会报错。 - * - 在 `fn` 中直接/间接使用了其中任意形参的控件,在最终计算时会被忽略。 - * @returns {Gui} 返回 Gui 对象,通过调用 `Show()` 方法显示窗口。 - * @example - * createGui(fn).Show() - * fn(x,y,w,h){ - * g := Gui("AlwaysOnTop") - * g.SetFont("s12", "微软雅黑") - * g.AddText(, "这是一个示例,4个形参不能省略") - * g.AddButton("w" w,"确定") - * ; ... 其他控件配置 - * return g - * } - */ -createGui(fn) { - _g := fn(0, 0, 0, 0) - _g.Show("Hide") - _g.GetPos(&x, &y, &w, &h) - _g.Destroy() - return fn(x, y, w, h) -} - /** * 显示信息 * @param {Array} msgList 字符串数组,每一项都会生成一个 Text 控件,控件之间有较大间距,如果不希望有间距,应该使用换行符拼接成一个字符串 @@ -190,8 +157,7 @@ createGui(fn) { * showMsg(["Hello`nWorld", "test"]) */ showMsg(msgList, btnText := "确定") { - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") + g := createGuiOpt() g.MarginX := 0 g.AddLink("yp", "") for item in msgList { @@ -201,14 +167,13 @@ showMsg(msgList, btnText := "确定") { g.GetPos(, , &Gui_width) g.Destroy() - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") + g := createGuiOpt() for item in msgList { g.AddLink("w" Gui_width, item) } y := g.AddButton("w" Gui_width, btnText) - y.OnEvent("Click", yes) y.Focus() + y.OnEvent("Click", yes) yes(*) { g.Destroy() } diff --git a/src/v2/img/favicon-pause.png b/src/v2/img/favicon-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..2592b20920e1ed8586817c7211c4ef80411cba08 GIT binary patch literal 26563 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 literal 0 HcmV?d00001 diff --git a/src/v2/img/favicon.png b/src/v2/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e12ca1eefad927c20ca69bce59ab8c0c4495dce3 GIT binary patch literal 26637 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 c=9NInputTip 官网 Github Gitee') - ideGui.AddButton("xs w" Gui_width, "「设置光标获取模式」").OnEvent("Click", fn_cursor_mode) - y := ideGui.AddButton("xs w" Gui_width, "我知道了") - y.OnEvent("Click", yes) - y.Focus() - ideGui.OnEvent("Close", yes) - yes(*) { - ideGui.Destroy() - gc.w.enableJetBrainsGui := "" + g.AddEdit("xs -VScroll ReadOnly w" w, "1. 开启 Java Access Bridge`n2. 点击下方的或托盘菜单中的「设置光标获取模式」`n3. 将 JetBrains IDE 或其他 JAB 应用进程添加到其中的「JAB」列表中`n4. 如果未生效,请重启正在使用的 JetBrains IDE 或其他 JAB 应用`n5. 如果仍未生效,请重启 InputTip 或重启系统`n6. 有多块屏幕时,副屏幕上可能有坐标偏差,需要通过「设置特殊偏移量」调整") + g.AddLink(, '详细操作步骤,请查看: 官网 Github Gitee') + g.AddButton("xs w" w, "「设置光标获取模式」").OnEvent("Click", fn_cursor_mode) + g.AddButton("xs w" w, "「设置特殊偏移量」").OnEvent("Click", fn_app_offset) + y := g.AddButton("xs w" w, "我知道了") + y.Focus() + y.OnEvent("Click", e_close) + e_close(*) { + g.Destroy() + } + gc.w.enableJABGui := g + return g } - gc.w.enableJetBrainsGui := ideGui - ideGui.Show() runJetBrains() } else { - if (gc.w.enableJetBrainsGui) { - gc.w.enableJetBrainsGui.Destroy() - gc.w.enableJetBrainsGui := "" + if (gc.w.enableJABGui) { + gc.w.enableJABGui.Destroy() + gc.w.enableJABGui := "" } SetTimer(killAppTimer, -10) killAppTimer() { diff --git a/src/v2/menu/about.ahk b/src/v2/menu/about.ahk index 28003fd..43af1f7 100644 --- a/src/v2/menu/about.ahk +++ b/src/v2/menu/about.ahk @@ -3,58 +3,59 @@ fn_about(*) { gc.w.aboutGui.Destroy() gc.w.aboutGui := "" } - aboutGui := Gui("AlwaysOnTop") - aboutGui.SetFont(fz, "微软雅黑") - aboutGui.AddText(, "InputTip - 一个输入法状态(中文/英文/大写锁定)提示工具") - aboutGui.AddLink(, '- 因为实现简单,就是去掉 v1 中方块符号的文字,加上不同的背景颜色') - aboutGui.AddPicture("w365 h-1", "InputTipSymbol\default\offer.png") - aboutGui.Show("Hide") - aboutGui.GetPos(, , &Gui_width) - aboutGui.Destroy() + createGui(aboutGui).Show() + aboutGui(info) { + g := createGuiOpt("InputTip - v" currentVersion) - aboutGui := Gui("AlwaysOnTop", "InputTip - v" currentVersion) - aboutGui.SetFont(fz, "微软雅黑") - aboutGui.AddText("Center w" Gui_width, "InputTip - 一个输入法状态(中文/英文/大写锁定)实时提示工具") - tab := aboutGui.AddTab3("-Wrap", ["关于项目", "赞赏支持", "参考项目", "其他项目"]) - tab.UseTab(1) - aboutGui.AddText("Section", '当前版本: ') - aboutGui.AddEdit("yp ReadOnly cRed", currentVersion) - aboutGui.AddText("xs", '开发人员: ') - aboutGui.AddEdit("yp ReadOnly", 'abgox') - aboutGui.AddText("xs", 'QQ 账号: ') - aboutGui.AddEdit("yp ReadOnly", '1151676611') - aboutGui.AddText("xs", 'QQ 群聊(交流反馈): ') - aboutGui.AddEdit("yp ReadOnly", '451860327') - aboutGui.AddText("xs", "-------------------------------------------------------------------------------") - aboutGui.AddLink("xs", '1. 官网: https://inputtip.pages.dev') - aboutGui.AddLink("xs", '2. Github: https://github.com/abgox/InputTip') - aboutGui.AddLink("xs", '3. Gitee: https://gitee.com/abgox/InputTip') - tab.UseTab(2) - aboutGui.AddText("Section", "如果 InputTip 对你有所帮助,你也可以出于善意, 向我捐款。`n非常感谢对 InputTip 的支持!希望 InputTip 能一直帮助你!") - aboutGui.AddPicture("h-1 w" Gui_width / 4 * 3, "InputTipSymbol\default\offer.png") - tab.UseTab(3) - aboutGui.AddLink("Section", '1. ImTip - aardio') - aboutGui.AddLink("xs", '2. KBLAutoSwitch - flyinclouds') - aboutGui.AddLink("xs", '3. AutoHotkeyScripts - Tebayaki') - aboutGui.AddLink("xs", '4. RedDot - Autumn-one') - aboutGui.AddLink("xs", '5. language-indicator - yakunins') - aboutGui.AddLink("xs", '- InputTip v1 是在鼠标附近显示带文字的方块符号') - aboutGui.AddLink("xs", '- InputTip v2 默认通过不同颜色的鼠标样式来区分') - aboutGui.AddLink("xs", '- 后来参照了 RedDot 和 language-indicator 的设计') - aboutGui.AddLink("xs", '- 因为实现很简单,就是去掉 v1 中方块符号的文字,加上不同的背景颜色') + g.AddText("Center w" info.w, "InputTip - 一个输入法状态实时提示工具") + tab := g.AddTab3("-Wrap", ["关于项目", "赞赏支持", "参考项目", "其他项目"]) + tab.UseTab(1) + g.AddText("Section", '当前版本: ') + g.AddEdit("yp ReadOnly cRed", currentVersion) + g.AddText("xs", '开发人员: ') + g.AddEdit("yp ReadOnly", 'abgox') + g.AddText("xs", 'QQ 账号: ') + g.AddEdit("yp ReadOnly", '1151676611') + g.AddText("xs", 'QQ 群聊(交流反馈): ') + g.AddEdit("yp ReadOnly", '451860327') + g.AddText("xs", "-------------------------------------------------------------------------------") - tab.UseTab(4) - aboutGui.AddLink("Section w" Gui_width, '1. PSCompletions : 一个 PowerShell 补全模块,它能让你在 PowerShell 中更简单、更方便地使用命令补全。') - aboutGui.AddLink("Section w" Gui_width, '2. ...') + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 - tab.UseTab(0) - btn := aboutGui.AddButton("Section w" Gui_width + aboutGui.MarginX * 2, "关闭") - btn.Focus() - btn.OnEvent("Click", fn_close) - aboutGui.OnEvent("Close", fn_close) - fn_close(*) { - aboutGui.Destroy() + g.AddLink("xs", '1. 官网: https://inputtip.pages.dev') + g.AddLink("xs", '2. Github: https://github.com/abgox/InputTip') + g.AddLink("xs", '3. Gitee: https://gitee.com/abgox/InputTip') + tab.UseTab(2) + g.AddLink("Section", '- 通过 ko-fi.com 赞赏支持') + g.AddText("xs", '- 通过微信和支付宝赞赏支持') + g.AddPicture("h-1 w" w / 4 * 3, "InputTipSymbol\default\offer.png") + tab.UseTab(3) + g.AddLink("Section", '1. ImTip - aardio') + g.AddLink("xs", '2. KBLAutoSwitch - flyinclouds') + g.AddLink("xs", '3. AutoHotkeyScripts - Tebayaki') + g.AddLink("xs", '4. RedDot - Autumn-one') + g.AddLink("xs", '5. language-indicator - yakunins') + g.AddText("xs", '- InputTip v1 是在鼠标附近显示带文字的方块符号') + g.AddText("xs", '- InputTip v2 默认通过不同颜色的鼠标样式来区分') + g.AddText("xs", '- 后来参照了 RedDot 和 language-indicator 的设计') + g.AddText("xs", '- 因为实现很简单,就是去掉 v1 中方块符号的文字,加上不同的背景颜色') + + tab.UseTab(4) + g.AddLink("Section w" bw, '1. PSCompletions : 一个 PowerShell 补全模块,它能让你在 PowerShell 中更简单、更方便地使用命令补全。') + g.AddLink("Section w" bw, '2. ...') + + tab.UseTab(0) + btn := g.AddButton("Section w" w, "关闭") + btn.Focus() + btn.OnEvent("Click", e_close) + e_close(*) { + g.Destroy() + } + gc.w.aboutGui := g + return g } - gc.w.aboutGui := aboutGui - aboutGui.Show() } diff --git a/src/v2/menu/app-offset.ahk b/src/v2/menu/app-offset.ahk index 9146b22..75dc239 100644 --- a/src/v2/menu/app-offset.ahk +++ b/src/v2/menu/app-offset.ahk @@ -7,7 +7,7 @@ fn_app_offset(*) { list: "特殊偏移量列表", color: "cRed", about: '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到「特殊偏移量列表」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方是「特殊偏移量列表」,可以设置指定应用在不同屏幕下的符号显示偏移量`n - 双击列表中任意应用进程,会弹出偏移量设置窗口,或者点击窗口底部按钮移除它`n`n2. 如何设置偏移量?`n - 当双击任意应用进程后,会弹出偏移量设置窗口`n - 通过屏幕标识和坐标信息,判断是哪一块屏幕,然后设置对应的偏移量`n - 偏移量的修改实时生效,你可以立即在对应窗口中看到效果`n - 如何通过坐标信息判断屏幕?`n - 假设你有两块屏幕,主屏幕在左边,副屏幕在右边`n - 那么副屏幕的左上角 X 坐标一定大于或等于主屏幕的右下角 X 坐标', - link: '相关链接: 关于特殊偏移量', + link: '相关链接: 关于特殊偏移量', addConfirm: "", addConfirm2: "", addConfirm3: "", @@ -32,111 +32,135 @@ fn_app_offset(*) { handleClick(LV, RowNumber, tipList, "rm") } addFn(tipList) { - _gui := tipList.gui addApp("xxx.exe") addApp(v) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { + g := createGuiOpt("InputTip - 设置特殊偏移量") + text := "每次只能添加一个应用进程名称" + if (useWhiteList) { + text .= "`n如果它不在白名单中,则会同步添加到白名单中" } - g_2 := Gui("AlwaysOnTop", "InputTip - 手动添加进程") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 + g.AddText("cRed", text) + g.AddText("xs", "应用进程名称: ") - ; 需要同步添加到白名单 - if (useWhiteList && tipList.addConfirm4) { - g_2.AddText("cRed", tipList.addConfirm4) + if (info.i) { + return g } - g_2.AddText(, "1. 进程名称应该是") - g_2.AddText("yp cRed", "xxx.exe") - g_2.AddText("yp", "这样的格式") - g_2.AddText("xs", "2. 每一次只能添加一个") - g_2.AddText("xs", "应用进程名称: ") - g_2.AddEdit("yp vexe_name", "").Value := v - g_2.AddButton("xs w" bw, "添加").OnEvent("Click", yes) - yes(*) { - exe_name := g_2.Submit().exe_name - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || InStr(exe_name, ":")) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + w := info.w + bw := w - g.MarginX * 2 + + gc._exe_name := g.AddEdit("yp") + gc._exe_name.Value := v + g.AddButton("xs w" bw, "添加").OnEvent("Click", e_yes) + e_yes(*) { + exe_name := gc._exe_name.value + g.Destroy() + if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "是一个错误的应用进程名称") + g.AddText("xs cRed", '正确的应用进程名称是 xxx.exe 这样的格式`n同时文件名中不能包含这些英文符号 \ / : * ? " < >|') + + if (info.i) { + return g } - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText(, "进程名称不符合格式要求,请重新输入") - y := g_2.AddButton("w" bw, "我知道了") - y.OnEvent("click", close) + w := info.w + bw := w - g.MarginX * 2 + + y := g.AddButton("xs w" bw, "重新输入") y.Focus() - close(*) { - g_2.Destroy() + y.OnEvent("click", e_close) + e_close(*) { + g.Destroy() addApp(exe_name) } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } return } - is_exist := 0 + isExist := 0 for v in app_offset.OwnProps() { if (v = exe_name) { - is_exist := 1 + isExist := 1 break } } - if (is_exist) { - createGui(fn1).Show() - fn1(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + if (isExist) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(existGui).Show() + existGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "这个应用进程已经存在了") + + if (info.i) { + return g } - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText("cRed", exe_name) - g_2.AddText("yp", "已经在「特殊偏移量列表」中了,请重新输入") - g_2.AddButton("xs w" bw, "重新输入").OnEvent("click", close) - close(*) { - g_2.Destroy() + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("xs w" bw, "重新输入").OnEvent("click", e_close) + e_close(*) { + g.Destroy() addApp(exe_name) } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } } else { handleClick("", "", tipList, "input", exe_name) } } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } } } handleClick(LV, RowNumber, tipList, action, app := "") { - if (gc.w.offsetGui) { - gc.w.offsetGui.Destroy() - gc.w.offsetGui := "" + fn_write_offset() { + gc.appOffsetGui_LV_rm_title.Text := "特殊偏移量列表 ( " gc.appOffsetGui_LV_rm.GetCount() " 个 )" + _app_offset := "" + for v in app_offset.OwnProps() { + _info := v "|" + for s in app_offset.%v%.OwnProps() { + _info .= s "/" app_offset.%v%.%s%.x "/" app_offset.%v%.%s%.y "*" + } + _app_offset .= ":" SubStr(_info, 1, StrLen(_info) - 1) + } + writeIni("app_offset", SubStr(_app_offset, 2)) + restartJetBrains() } + global app_offset screenList := getScreenInfo() if (action != "input") { app := LV.GetText(RowNumber) } if (action = "add" || action = "input") { - is_exist := 0 + isExist := 0 for v in app_offset.OwnProps() { if (v = app) { - is_exist := 1 + isExist := 1 break } } - if (!is_exist) { + if (!isExist) { gc.appOffsetGui_LV_rm.Add(, app) } if (action = "add") { @@ -152,102 +176,88 @@ fn_app_offset(*) { updateWhiteList(app) } } - offsetGui := Gui("AlwaysOnTop", "InputTip - 设置 " app " 的特殊偏移量") - offsetGui.SetFont(fz, "微软雅黑") - offsetGui.AddText(, "正在设置") - offsetGui.AddText("yp cRed", app) - offsetGui.AddText("yp", "的特殊偏移量") - tab := offsetGui.AddTab3("xs -Wrap", ["屏幕1"]) - tab.UseTab(1) - offsetGui.AddText(, "屏幕坐标信息(X,Y): 左上角(99999, 99999),右下角(99999, 99999)") - offsetGui.AddText(, "水平方向的偏移量: ") - offsetGui.AddEdit("yp") - offsetGui.Show("Hide") - offsetGui.GetPos(, , &Gui_width) - offsetGui.Destroy() - - offsetGui := Gui("AlwaysOnTop", "InputTip - 设置 " app " 的特殊偏移量") - offsetGui.SetFont(fz, "微软雅黑") - offsetGui.AddText(, "正在设置") - offsetGui.AddText("yp cRed", app) - offsetGui.AddText("yp", "的特殊偏移量") - pages := [] - for v in screenList { - pages.push("屏幕 " v.num) + + if (gc.w.offsetGui) { + gc.w.offsetGui.Destroy() + gc.w.offsetGui := "" } - bw := Gui_width - offsetGui.MarginX * 2 - tab := offsetGui.AddTab3("xs -Wrap w" bw, pages) - for v in screenList { - tab.UseTab(v.num) - if (v.num = v.main) { - offsetGui.AddText(, "这是主屏幕(主显示器),屏幕标识: " v.num) - } else { - offsetGui.AddText(, "这是副屏幕(副显示器),屏幕标识: " v.num) + createGui(setOffsetGui).Show() + setOffsetGui(info) { + g := createGuiOpt("InputTip - 设置 " app " 的特殊偏移量") + g.AddText(, "正在设置") + g.AddText("yp cRed", app) + g.AddText("yp", "的特殊偏移量") + pages := [] + for v in screenList { + pages.push("屏幕 " v.num) } + tab := g.AddTab3("xs -Wrap", pages) - offsetGui.AddText(, "屏幕坐标信息(X,Y): 左上角(" v.left ", " v.top "),右下角(" v.right ", " v.bottom ")") + for v in screenList { + tab.UseTab(v.num) + if (v.num = v.main) { + g.AddText(, "这是主屏幕(主显示器),屏幕标识: " v.num) + } else { + g.AddText(, "这是副屏幕(副显示器),屏幕标识: " v.num) + } - x := 0, y := 0 - try { - x := app_offset.%app%.%v.num%.x - y := app_offset.%app%.%v.num%.y - } catch { - app_offset.%app%.%v.num% := { x: 0, y: 0 } - } + g.AddText(, "屏幕坐标信息(X,Y): 左上角(" v.left ", " v.top "),右下角(" v.right ", " v.bottom ")") - offsetGui.AddText("Section", "水平方向的偏移量: ") - _g := offsetGui.AddEdit("voffset_x_" v.num " yp") - _g.Value := x - _g.__num := v.num - _g.OnEvent("Change", fn_change_offset_x) - fn_change_offset_x(item, *) { - app_offset.%app%.%item.__num%.x := returnNumber(item.Value) - fn_write_offset() - } - offsetGui.AddText("xs", "垂直方向的偏移量: ") - _g := offsetGui.AddEdit("voffset_y_" v.num " yp") - _g.Value := y - _g.__num := v.num - _g.OnEvent("Change", fn_change_offset_y) - fn_change_offset_y(item, *) { - app_offset.%app%.%item.__num%.y := returnNumber(item.Value) - fn_write_offset() - } - } - tab.UseTab(0) - if (action = "rm") { - _g := offsetGui.AddButton("Section w" bw, "将它移除") - _g.OnEvent("Click", fn_rm) - fn_rm(*) { - close() - RowText := LV.GetText(RowNumber) - LV.Delete(RowNumber) + x := 0, y := 0 try { - gc.%tipList.gui "_LV_add"%.Add(, RowText, WinGetTitle("ahk_exe " RowText)) + x := app_offset.%app%.%v.num%.x + y := app_offset.%app%.%v.num%.y + } catch { + app_offset.%app%.%v.num% := { x: 0, y: 0 } + } + + g.AddText("Section", "水平方向的偏移量: ") + _ := g.AddEdit("yp") + _.Value := x + _.__num := v.num + _.OnEvent("Change", e_change_offset_x) + e_change_offset_x(item, *) { + app_offset.%app%.%item.__num%.x := returnNumber(item.value) + fn_write_offset() + } + g.AddText("xs", "垂直方向的偏移量: ") + _ := g.AddEdit("yp") + _.Value := y + _.__num := v.num + _.OnEvent("Change", e_change_offset_y) + e_change_offset_y(item, *) { + app_offset.%app%.%item.__num%.y := returnNumber(item.value) + fn_write_offset() } - app_offset.DeleteProp(app) - fn_write_offset() } - } - offsetGui.OnEvent("Close", close) - close(*) { - offsetGui.Destroy() - } - gc.w.offsetGui := offsetGui - offsetGui.Show() - fn_write_offset() { - gc.appOffsetGui_LV_rm_title.Text := "特殊偏移量列表 ( " gc.appOffsetGui_LV_rm.GetCount() " 个 )" - _app_offset := "" - for v in app_offset.OwnProps() { - _info := v "|" - for s in app_offset.%v%.OwnProps() { - _info .= s "/" app_offset.%v%.%s%.x "/" app_offset.%v%.%s%.y "*" + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + tab.UseTab(0) + if (action = "rm") { + _ := g.AddButton("Section w" bw, "将它移除") + _.OnEvent("Click", e_rm) + e_rm(*) { + close() + exe_name := LV.GetText(RowNumber) + LV.Delete(RowNumber) + try { + gc.%tipList.gui "_LV_add"%.Add(, exe_name, WinGetTitle("ahk_exe " exe_name)) + } + app_offset.DeleteProp(app) + fn_write_offset() } - _app_offset .= ":" SubStr(_info, 1, StrLen(_info) - 1) } - writeIni("app_offset", SubStr(_app_offset, 2)) - restartJetBrains() + g.OnEvent("Close", close) + close(*) { + g.Destroy() + } + gc.w.offsetGui := g + return g } } } diff --git a/src/v2/menu/bw-list.ahk b/src/v2/menu/bw-list.ahk index 1f6dc49..790fa6c 100644 --- a/src/v2/menu/bw-list.ahk +++ b/src/v2/menu/bw-list.ahk @@ -1,50 +1,58 @@ fn_bw_list(*) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.bwListGui) { - gc.w.bwListGui.Destroy() - gc.w.bwListGui := "" + if (gc.w.bwListGui) { + gc.w.bwListGui.Destroy() + gc.w.bwListGui := "" + } + createGui(bwListGui).Show() + bwListGui(info) { + g := createGuiOpt("InputTip - 设置符号显示的黑/白名单") + g.AddText("cRed", "白名单机制 : 只有在「白」名单中的应用进程窗口会显示符号`n黑名单机制 : 只有不在「黑」名单中的应用进程窗口会显示符号") + g.AddLink("cGray", '如果你正在使用 白名单机制,InputTip 提供了同步添加机制`n当使用以下配置菜单时,添加的应用进程会同步添加到「白」名单中`n「设置光标获取模式」「设置特殊偏移量」「指定窗口自动切换状态」') + g.AddText(, "选择符号显示的名单机制: ") + + if (info.i) { + return g } - g := Gui("AlwaysOnTop", "InputTip - 设置符号显示的黑/白名单") - g.SetFont(fz, "微软雅黑") + w := info.w bw := w - g.MarginX * 2 - g.AddText("cRed", "白名单机制 : 只有在「白」名单中的应用进程窗口会显示符号`n黑名单机制 : 只有不在「黑」名单中的应用进程窗口会显示符号") - g.AddLink("cGray", '如果你正在使用 白名单机制,InputTip 提供了同步添加机制`n当使用以下配置菜单时,添加的应用进程会同步添加到「白」名单中`n「设置光标获取模式」「设置特殊偏移量」「指定窗口自动切换状态」') - g.AddText(, "选择符号显示的名单机制: ") - gc._bw_list := g.AddDropDownList("yp AltSubmit vuseWhiteList Choose" useWhiteList + 1, ["使用「黑」名单", "使用「白」名单"]) - gc._bw_list.OnEvent("Change", fn_change_list) - fn_change_list(item, *) { - if (useWhiteList = item.Value) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } + gc._bw_list := g.AddDropDownList("yp AltSubmit Choose" useWhiteList + 1, ["使用「黑」名单", "使用「白」名单"]) + gc._bw_list.OnEvent("Change", e_change_list) + e_change_list(item, *) { + if (useWhiteList = item.value) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(warningGui).Show() + warningGui(info) { gc._bw_list.Value := useWhiteList + 1 - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 - g.AddText("cRed", "确定要使用「黑」名单吗?") - g.AddText("cRed", "这是不建议的,更建议继续使用「白」名单`n因为「黑」名单机制下,你需要承担未知的可能存在的窗口兼容性代价") - g.AddButton("w" bw, "【是】我确定要使用「黑」名单").OnEvent("Click", yes) - g.AddButton("w" bw, "【否】不,我只是不小心点到了").OnEvent("Click", no) - g.OnEvent("Close", no) - yes(*) { - g.Destroy() + _g := createGuiOpt() + _g.AddText(, "确定要使用「黑」名单吗?") + _g.AddText("cRed", "这是不建议的,更建议继续使用「白」名单`n因为「黑」名单机制下,你需要承担未知的可能存在的窗口兼容性代价") + + if (info.i) { + return _g + } + w := info.w + bw := w - _g.MarginX * 2 + + _g.AddButton("w" bw, "【是】我确定要使用「黑」名单").OnEvent("Click", e_yes) + _g.AddButton("w" bw, "【否】不,我只是不小心点到了").OnEvent("Click", e_no) + e_yes(*) { + _g.Destroy() gc._bw_list.Value := 1 writeIni("useWhiteList", 0) global useWhiteList := 0 } - no(*) { - g.Destroy() + e_no(*) { + _g.Destroy() } - gc.w.subGui := g - return g + gc.w.subGui := _g + return _g } } else { - value := item.Value - 1 + value := item.value - 1 writeIni("useWhiteList", value) global useWhiteList := value restartJetBrains() @@ -52,15 +60,15 @@ fn_bw_list(*) { } g.AddEdit("xs Disabled", "如果使用「黑」名单,你需要承担未知的可能存在的窗口兼容性代价") _c := g.AddButton("xs w" bw, "设置「白」名单") - _c.OnEvent("Click", set_white_list) _c.Focus() + _c.OnEvent("Click", set_white_list) set_white_list(*) { - fn_close() + g.Destroy() fn_white_list() } g.AddButton("xs w" bw, "设置「黑」名单").OnEvent("Click", set_black_list) set_black_list(*) { - fn_close() + g.Destroy() fn_common({ gui: "blackListGui", config: "app_hide_state", @@ -69,11 +77,10 @@ fn_bw_list(*) { list: "符号显示黑名单", color: "cRed", about: '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到「符号显示黑名单」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n - 下方是「符号显示黑名单」应用进程列表,如果使用黑名单机制,它将生效`n - 双击列表中任意应用进程,就可以将它移除`n`n - 黑名单机制: 只有不在黑名单中的应用进程窗口才会显示符号`n - 使用黑名单,可能会有一些特殊窗口的兼容性问题`n - 建议使用白名单机制,最好少用黑名单机制`n`n2. 如何快速添加应用进程?`n - 每次双击应用进程后,会弹出操作窗口,需要选择添加/移除或取消`n - 如果你确定当前操作不需要取消,可以在操作窗口弹出后,按下空格键快速确认', - link: '相关链接: 白名单机制', + link: '相关链接: 白名单机制', addConfirm: "是否要将", addConfirm2: "添加到「符号显示黑名单」中?", addConfirm3: "添加后,黑名单机制下,在此应用窗口中时,不会显示符号", - addConfirm4: "", rmConfirm: "是否要将", rmConfirm2: "从「符号显示黑名单」中移除?", rmConfirm3: "移除后,黑名单机制下,在此应用窗口中时,会显示符号", @@ -86,10 +93,6 @@ fn_bw_list(*) { restartJetBrains() } } - g.OnEvent("Close", fn_close) - fn_close(*) { - g.Destroy() - } gc.w.bwListGui := g return g } diff --git a/src/v2/menu/check-update.ahk b/src/v2/menu/check-update.ahk index 709764d..3b5ad6a 100644 --- a/src/v2/menu/check-update.ahk +++ b/src/v2/menu/check-update.ahk @@ -1,41 +1,37 @@ fn_check_update(*) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.checkUpdateGui) { - gc.w.checkUpdateGui.Destroy() - gc.w.checkUpdateGui := "" - } - gc.checkUpdateDelay := checkUpdateDelay - g := Gui("AlwaysOnTop", "InputTip - 设置更新检查") - g.SetFont(fz, "微软雅黑") - g.AddEdit("ReadOnly cRed -VScroll w" w - g.MarginX * 2, "- 单位: 分钟,默认 1440 分钟(1 天)`n- 避免程序错误,可以设置的最大范围是 0-50000 分钟`n- 如果为 0,则表示不检查版本更新`n- 如果不为 0,在 InputTip 启动后,会立即检查一次`n- 如果大于 50000,则会直接使用 50000`n") - g.AddText(, "每隔多少分钟检查一次更新: ") - _c := g.AddEdit("yp Number Limit5 vcheckUpdateDelay") - _c.Value := readIni("checkUpdateDelay", 1440) - _c.OnEvent("Change", fn_change_delay) - _c.Focus() - g.AddText() - fn_change_delay(item, *) { - value := item.Value - if (value != "") { - if (value > 50000) { - value := 50000 - } - writeIni("checkUpdateDelay", value) - global checkUpdateDelay := value - if (checkUpdateDelay) { - checkUpdate() - } + if (gc.w.checkUpdateGui) { + gc.w.checkUpdateGui.Destroy() + gc.w.checkUpdateGui := "" + } + gc.checkUpdateDelay := checkUpdateDelay + g := createGuiOpt("InputTip - 设置更新检查的间隔时间") + g.AddText("cRed", "- 单位: 分钟,默认 1440 分钟(1 天)`n- 避免程序错误,可以设置的最大范围是 0-50000 分钟`n- 如果为 0,则表示不检查版本更新`n- 如果不为 0,在 InputTip 启动后,会立即检查一次`n- 如果大于 50000,则会直接使用 50000") + g.AddText(, "每隔多少分钟检查一次更新: ") + _ := g.AddEdit("yp Number Limit5") + _.Value := readIni("checkUpdateDelay", 1440) + _.Focus() + _.OnEvent("Change", e_setIntervalTime) + g.AddText() + e_setIntervalTime(item, *) { + value := item.value + if (value != "") { + if (value > 50000) { + value := 50000 } - } - g.OnEvent("Close", close) - close(*) { - g.Destroy() - if (gc.checkUpdateDelay = 0 && checkUpdateDelay != 0) { - checkUpdate(1) + writeIni("checkUpdateDelay", value) + global checkUpdateDelay := value + if (checkUpdateDelay) { + checkUpdate() } } - gc.w.checkUpdateGui := g - return g } + g.OnEvent("Close", e_close) + e_close(*) { + g.Destroy() + if (gc.checkUpdateDelay = 0 && checkUpdateDelay != 0) { + checkUpdate(1) + } + } + gc.w.checkUpdateGui := g + g.Show() } diff --git a/src/v2/menu/config.ahk b/src/v2/menu/config.ahk index 3762907..8d8c462 100644 --- a/src/v2/menu/config.ahk +++ b/src/v2/menu/config.ahk @@ -2,541 +2,605 @@ fn_config(*) { if (gc.w.configGui) { gc.w.configGui.Destroy() gc.w.configGui := "" - try { gc.w.subGui.Destroy() gc.w.subGui := "" } } line := "-------------------------------------------------------------------------------------------------------------" - configGui := Gui("AlwaysOnTop") - configGui.SetFont(fz, "微软雅黑") - configGui.AddText(, "-------------------------------------------------------------------------------------------------------") - configGui.Show("Hide") - configGui.GetPos(, , &Gui_width) - configGui.Destroy() - - configGui := Gui("AlwaysOnTop", "InputTip - 更改配置") - configGui.SetFont(fz, "微软雅黑") - - bw := Gui_width - configGui.MarginX * 2 - ; tab := configGui.AddTab3("-Wrap 0x100", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号", "配色网站"]) - tab := configGui.AddTab3("-Wrap", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号", "其他杂项", "配色网站"]) - tab.UseTab(1) - - configGui.AddLink("Section cRed", '你首先应该查看相关的说明文档: 官网 Github Gitee 一些常见的使用问题') + createGui(changeConfigGui).Show() + changeConfigGui(info) { + g := createGuiOpt("InputTip - 更改配置") + ; tab := g.AddTab3("-Wrap 0x100", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号"]) + tab := g.AddTab3("-Wrap", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号", "其他杂项"]) + tab.UseTab(1) + g.AddLink("Section cRed", '你首先应该查看相关的说明文档: 官网 Github Gitee 一些常见的使用问题') + g.AddText("xs", line) + g.AddText("xs cGray", "所有的配置项修改会实时生效,可以立即看到最新效果,但是更改时不要太快`n比如需要输入值的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要放缓输入速度`n") - configGui.AddText("xs cGray", "所有的配置项修改会实时生效,可以立即看到最新效果,但是更改时不要太快`n比如需要输入值的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要放缓输入速度") - configGui.AddText("xs", line) - configGui.AddText("xs", "1. 要不要同步修改鼠标样式: ") - _g := configGui.AddDropDownList("w" Gui_width / 1.6 " yp AltSubmit Choose" changeCursor + 1, ["【否】不要修改鼠标样式,保持原本的鼠标样式", "【是】需要修改鼠标样式,随输入法状态而变化"]) - _g.OnEvent("Change", fn_change_cursor) - _g.Focus() - fn_change_cursor(item, *) { - static last := changeCursor + 1 - if (last = item.Value) { - return + if (info.i) { + return g } - last := item.Value + w := info.w + bw := w - g.MarginX * 2 - if (item.Value = 1) { - writeIni("changeCursor", 0) - global changeCursor := 0 - for v in cursorInfo { - if (v.origin) { - DllCall("SetSystemCursor", "Ptr", DllCall("LoadCursorFromFile", "Str", v.origin, "Ptr"), "Int", v.value) - } + g.AddText("xs", "1. 要不要同步修改鼠标样式: ") + _ := g.AddDropDownList("w" bw / 2 " yp AltSubmit Choose" changeCursor + 1, ["【否】不要修改鼠标样式,保持原本的鼠标样式", "【是】需要修改鼠标样式,随输入法状态而变化"]) + g.AddText("xs cGray", "推荐设置为【是】,它与符号一起配合使用才是最完美的输入法状态提示方案") + _.Focus() + _.OnEvent("Change", e_change_cursor) + e_change_cursor(item, *) { + static last := changeCursor + 1 + if (last = item.value) { + return } + last := item.value + + if (item.value = 1) { + writeIni("changeCursor", 0) + global changeCursor := 0 + for v in cursorInfo { + if (v.origin) { + DllCall("SetSystemCursor", "Ptr", DllCall("LoadCursorFromFile", "Str", v.origin, "Ptr"), "Int", v.value) + } + } - createGui(fn).Show() - fn(x, y, w, h) { if (gc.w.subGui) { gc.w.subGui.Destroy() gc.w.subGui := "" } - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 - g.AddText(, "正在尝试恢复到使用 InputTip 之前的鼠标样式") - g.AddText("cRed", "可能无法完全恢复,你需要进行以下额外步骤或者重启系统:`n1. 进入「系统设置」=>「蓝牙和其他设备」=>「鼠标」=>「其他鼠标设置」`n2. 先更改为另一个鼠标样式方案,再改回你之前使用的方案") - y := g.AddButton("w" bw, "我知道了") - y.OnEvent("Click", yes) - y.Focus() - yes(*) { - g.Destroy() + createGui(doingGui).Show() + doingGui(info) { + g := createGuiOpt() + g.AddText(, "正在尝试恢复到使用 InputTip 之前的鼠标样式") + g.AddText("cRed", "可能无法完全恢复,你需要进行以下额外步骤或者重启系统:`n1. 进入「系统设置」=>「蓝牙和其他设备」=>「鼠标」=>「其他鼠标设置」`n2. 先更改为另一个鼠标样式方案,再改回你之前使用的方案") + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + y := g.AddButton("w" bw, "我知道了") + y.Focus() + y.OnEvent("Click", yes) + yes(*) { + g.Destroy() + } + gc.w.subGui := g + return g } - gc.w.subGui := g - return g + } else { + writeIni("changeCursor", 1) + global changeCursor := 1 + reloadCursor() } - } else { - writeIni("changeCursor", 1) - global changeCursor := 1 - - reloadCursor() + restartJetBrains() } - restartJetBrains() - } - configGui.addText("xs", "2. 在输入光标附近显示什么类型的符号: ") - configGui.AddDropDownList("yp AltSubmit Choose" symbolType + 1, ["不显示符号", "显示图片符号", "显示方块符号", "显示文本符号"]).OnEvent("Change", fn_symbol_type) - configGui.AddText("xs cGray", "当鼠标悬浮在符号上时,符号会立即隐藏,下次键盘操作或光标位置变化时再次显示") - fn_symbol_type(item, *) { - writeIni("symbolType", item.Value - 1) - global symbolType := item.Value - 1 - hideSymbol() - updateSymbol() - reloadSymbol() - } - configGui.AddText("xs", "3. 无键盘和鼠标左键点击操作时,符号在多少") - configGui.AddText("yp cRed", "毫秒") - configGui.AddText("yp", "后隐藏:") - _g := configGui.AddEdit("yp Number") - _g.Value := HideSymbolDelay - _g.OnEvent("Change", fn_hide_symbol_delay) - fn_hide_symbol_delay(item, *) { - value := item.Value - if (value = "") { - return + g.addText("xs", "2. 在输入光标附近显示什么类型的符号: ") + g.AddDropDownList("yp AltSubmit Choose" symbolType + 1 " w" bw / 3, ["【不】显示符号", "显示【图片】符号", "显示【方块】符号", "显示【文本】符号"]).OnEvent("Change", e_symbol_type) + e_symbol_type(item, *) { + writeIni("symbolType", item.value - 1) + global symbolType := item.value - 1 + hideSymbol() + updateSymbol() + reloadSymbol() + gc._focusSymbol.Focus() } - if (value != 0 && value < 150) { - value := 150 + g.AddText("yp w20") + gc._focusSymbol := g.AddEdit("yp w1") + gc._focusSymbol.OnEvent("Focus", fn_clear) + gc._focusSymbol.OnEvent("LoseFocus", fn_clear) + fn_clear(item, *) { + item.value := "" } - writeIni("HideSymbolDelay", value) - global HideSymbolDelay := value - updateDelay() - restartJetBrains() - } - configGui.AddEdit("xs ReadOnly cGray -VScroll w" Gui_width, "单位: 毫秒,默认为 0 毫秒,表示不隐藏符号。`n当不为 0 时,此值不能小于 150,若小于 150,则使用 150。建议 500 以上。`n符号隐藏后,下次键盘操作或点击鼠标左键会再次显示符号") - configGui.AddText("xs", "4. 每多少") - configGui.AddText("yp cRed", "毫秒") - configGui.AddText("yp", "后更新符号的显示位置和状态:") - _g := configGui.AddEdit("yp Number Limit3") - _g.Value := delay - _g.OnEvent("Change", fn_delay) - fn_delay(item, *) { - value := item.Value - if (value = "") { - return + g.AddText("xs cGray", "鼠标悬浮在符号上时,符号会隐藏,下次键盘操作或光标位置变化时再次显示") + g.AddText("xs", "3. 无键盘和鼠标左键点击操作时,符号在多少") + g.AddText("yp cRed", "毫秒") + g.AddText("yp", "后隐藏:") + _ := g.AddEdit("yp Number") + _.Value := HideSymbolDelay + _.OnEvent("Change", e_hideSymbolDelay) + e_hideSymbolDelay(item, *) { + value := item.value + if (value = "") { + return + } + if (value != 0 && value < 150) { + value := 150 + } + writeIni("HideSymbolDelay", value) + global HideSymbolDelay := value + updateDelay() + restartJetBrains() } - value += value <= 0 - if (value > 500) { - value := 500 + g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "单位: 毫秒,默认为 0 毫秒,表示不隐藏符号。`n当不为 0 时,此值不能小于 150,若小于 150,则使用 150。建议 500 以上。`n符号隐藏后,下次键盘操作或点击鼠标左键会再次显示符号") + g.AddText("xs", "4. 每多少") + g.AddText("yp cRed", "毫秒") + g.AddText("yp", "后更新符号的显示位置和状态:") + _ := g.AddEdit("yp Number Limit3") + _.Value := delay + _.OnEvent("Change", e_delay) + e_delay(item, *) { + value := item.value + if (value = "") { + return + } + value += value <= 0 + if (value > 500) { + value := 500 + } + writeIni("delay", value) + global delay := value + restartJetBrains() } - writeIni("delay", value) - global delay := value - restartJetBrains() - } - ; configGui.AddUpDown("Range1-500", delay) - configGui.AddEdit("xs ReadOnly cGray -VScroll w" Gui_width, "单位:毫秒,默认为 50 毫秒。一般使用 1-100 之间的值。`n此值的范围是 1-500,如果超出范围则无效,会取最近的可用值。`n值越小,响应越快,性能消耗越大,根据电脑性能适当调整") - - tab.UseTab(2) - configGui.AddLink(, '查看设置鼠标样式文件夹的相关说明: 官网 Github Gitee') - configGui.AddText(, "建议点击下方的「下载鼠标样式扩展包」去下载已经适配的鼠标样式来使用") - configGui.AddText(, line) - configGui.AddText("cRed", "如果列表中显示的鼠标样式文件夹路径不是最新的,请重新打开这个配置界面") - typeList := [{ - label: "中文状态", - type: "CN", - }, { - label: "英文状态", - type: "EN", - }, { - label: "大写锁定", - type: "Caps", - }] - dirList := StrSplit(cursorDir, ":") - if (dirList.Length = 0) { - dirList := getCursorDir() - } + ; g.AddUpDown("Range1-500", delay) + g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "单位:毫秒,默认为 50 毫秒。一般使用 1-100 之间的值。`n此值的范围是 1-500,如果超出范围则无效,会取最近的可用值。`n值越小,响应越快,性能消耗越大,根据电脑性能适当调整") - configGui.AddText("Section", "选择不同状态下的鼠标样式文件夹目录路径: ") - for i, v in typeList { - configGui.AddText("xs", i ".") - configGui.AddText("yp cRed", v.label) - _g := configGui.AddDropDownList("xs r9 w" Gui_width " v" v.type "_cursor", dirList) - _g.OnEvent("Change", fn_cursor_dir) - fn_cursor_dir(item, *) { - writeIni(item.Name, item.Text) - updateCursor() - reloadCursor() + tab.UseTab(2) + g.AddText("Section", "你应该首先查看") + g.AddText("yp cRed", "鼠标样式") + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddText("xs", line) + g.AddText("xs Section cGray", "可以点击「下载鼠标样式扩展包」去下载已经适配的鼠标样式") + g.AddText("cRed", "如果列表中显示的鼠标样式文件夹路径不是最新的,请重新打开这个配置界面") + dirList := StrSplit(cursorDir, ":") + if (dirList.Length = 0) { + dirList := getCursorDir() } - try { - _g.Text := %v.type "_cursor"% - } catch { - _g.Text := "" + g.AddText("Section", "选择鼠标样式文件夹路径,InputTip 会使用其中的鼠标样式文件,根据不同输入法状态加载对应的鼠标样式") + for i, v in ["CN", "EN", "Caps"] { + g.AddText("xs", i ".") + g.AddText("yp cRed", stateMap.%v%) + _ := g.AddDropDownList("xs r9 w" bw, dirList) + _._config := v "_cursor" + _.OnEvent("Change", e_cursor_dir) + e_cursor_dir(item, *) { + writeIni(item._config, item.Text) + updateCursor() + reloadCursor() + } + try { + _.Text := %v "_cursor"% + } catch { + _.Text := "" + } } - } - configGui.AddButton("xs w" Gui_width, "下载鼠标样式扩展包").OnEvent("Click", fn_cursor_package) - fn_cursor_package(*) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + g.AddButton("xs w" bw, "下载鼠标样式扩展包").OnEvent("Click", e_cursor_package) + e_cursor_package(*) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + g := createGuiOpt("下载鼠标样式扩展包") + g.AddText("Center h30", "从以下任意可用地址中下载鼠标样式扩展包:") + g.AddLink("xs", 'https://inputtip.pages.dev/download/extra') + g.AddLink("xs", 'https://github.com/abgox/InputTip/releases/tag/extra') + g.AddLink("xs", 'https://gitee.com/abgox/InputTip/releases/tag/extra') + g.AddText(, "其中的鼠标样式已经完成适配,解压到 InputTipCursor 目录中即可使用") + g.Show() + gc.w.subGui := g } - dlGui := Gui("AlwaysOnTop", "下载鼠标样式扩展包") - dlGui.SetFont(fz, "微软雅黑") - dlGui.AddText("Center h30", "从以下任意可用地址中下载鼠标样式扩展包:") - dlGui.AddLink("xs", 'https://inputtip.pages.dev/download/extra') - dlGui.AddLink("xs", 'https://github.com/abgox/InputTip/releases/tag/extra') - dlGui.AddLink("xs", 'https://gitee.com/abgox/InputTip/releases/tag/extra') - dlGui.AddText(, "其中的鼠标样式已经完成适配,解压到 InputTipCursor 目录中即可使用") - dlGui.Show() - gc.w.subGui := dlGui - } - tab.UseTab(3) - configGui.AddLink("Section", '点击下方链接查看图片符号的详情说明: 官网 Github Gitee' "`n" line) - - symbolPicConfig := [{ - config: "pic_offset_x", - options: "xs", - opts: "", - tip: "图片符号的水平偏移量" - }, { - config: "pic_symbol_width", - options: "yp", - opts: "Number", - tip: "图片符号的宽度" - }, { - config: "pic_offset_y", - options: "xs", - opts: "", - tip: "图片符号的垂直偏移量" - }, { - config: "pic_symbol_height", - options: "yp", - opts: "Number", - tip: "图片符号的高度" - }] - for v in symbolPicConfig { - configGui.AddText(v.options, v.tip ": ") - _g := configGui.AddEdit("v" v.config " yp " v.opts) - _g.Value := readIni(v.config, 0) - _g.OnEvent("Change", fn_pic_config) - fn_pic_config(item, *) { - writeIni(item.Name, returnNumber(item.Value)) - hideSymbol() - updateSymbol() - reloadSymbol() - restartJetBrains() + tab.UseTab(3) + g.AddText("Section", "你应该首先查看") + g.AddText("yp cRed", "图片符号") + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddText("xs", line) + symbolPicConfig := [{ + config: "pic_offset_x", + textOpt: "Section xs", + editOpt: "", + tip: "水平偏移量" + }, { + config: "pic_offset_y", + textOpt: "yp", + editOpt: "", + tip: "垂直偏移量" + }, { + config: "pic_symbol_width", + textOpt: "yp", + editOpt: "Number", + tip: "宽度" + }, { + config: "pic_symbol_height", + textOpt: "yp", + editOpt: "Number", + tip: "高度" + }] + for v in symbolPicConfig { + g.AddText(v.textOpt, v.tip ": ") + _ := g.AddEdit("yp " v.editOpt " w" bw / 8) + _._config := v.config + _.Value := readIni(v.config, 0) + _.OnEvent("Change", e_pic_config) + e_pic_config(item, *) { + writeIni(item._config, returnNumber(item.value)) + hideSymbol() + updateSymbol() + reloadSymbol() + restartJetBrains() + } } - } - - dirList := StrSplit(picDir, ":") - if (dirList.Length = 0) { - dirList := getPicDir() - } + ; todo + g.AddText("xs", "是否启用") + g.AddText("yp cRed", "图片符号") + g.AddText("yp", "的独立配置: ") + g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + g.AddButton("xs w" bw, "设置图片符号在不同状态下的独立配置").OnEvent("Click", e_picIsolateConfig) + e_picIsolateConfig(*) { - configGui.AddText("xs Section cRed", "如果列表中显示的图片符号路径不是最新的,请重新打开这个配置界面") - configGui.AddText(, "选择不同状态下的图片符号的文件路径: ") - for i, v in typeList { - configGui.AddText("xs", i ".") - configGui.AddText("yp cRed", v.label) - _g := configGui.AddDropDownList("xs r9 w" Gui_width " v" v.type "_pic", dirList) - _g.OnEvent("Change", fn_pic_path) - fn_pic_path(item, *) { - writeIni(item.Name, item.Text) - hideSymbol() - updateSymbol() - reloadSymbol() } - try { - _g.Text := readIni(v.type "_pic", "") - } catch { - _g.Text := "" + dirList := StrSplit(picDir, ":") + if (dirList.Length = 0) { + dirList := getPicDir() } - } + g.AddText("xs Section cRed", "如果列表中显示的图片符号路径不是最新的,请重新打开这个配置界面") + g.AddText(, "选择图片符号的文件路径: ") + for i, v in ["CN", "EN", "Caps"] { + __ := g.AddText("xs", i ".") + _ := g.AddText("yp cRed", stateMap.%v%) + if (i = 1) { + __.GetPos(, , &_w1) + _.GetPos(, , &_w2) + g.AddText("yp w" w / 2 - (_w1 + g.MarginX * 2 + _w2) - g.MarginX / 2) + gc._focusSymbolPic := g.AddEdit("yp w1") + gc._focusSymbolPic.OnEvent("Focus", fn_clear) + gc._focusSymbolPic.OnEvent("LoseFocus", fn_clear) + } - configGui.AddButton("xs w" Gui_width, "下载图片符号扩展包").OnEvent("Click", fn_pic_package) - fn_pic_package(*) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + _ := g.AddDropDownList("xs r9 w" bw, dirList) + _._config := v "_pic" + _.OnEvent("Change", e_pic_path) + e_pic_path(item, *) { + writeIni(item._config, item.Text) + hideSymbol() + updateSymbol() + reloadSymbol() + if (symbolType = 1) { + gc._focusSymbolPic.Focus() + } + } + + try { + _.Text := readIni(v "_pic", "") + } catch { + _.Text := "" + } + } + g.AddButton("xs w" bw, "下载图片符号扩展包").OnEvent("Click", e_pic_package) + e_pic_package(*) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + g := createGuiOpt("下载图片符号扩展包") + g.AddText("Center h30", "从以下任意可用地址中下载图片符号扩展包:") + g.AddLink("xs", 'https://inputtip.pages.dev/download/extra') + g.AddLink("xs", 'https://github.com/abgox/InputTip/releases/tag/extra') + g.AddLink("xs", 'https://gitee.com/abgox/InputTip/releases/tag/extra') + g.AddText(, "将其中的图片解压到 InputTipSymbol 目录中即可使用") + g.Show() + gc.w.subGui := g } - dlGui := Gui("AlwaysOnTop", "下载图片符号扩展包") - dlGui.SetFont(fz, "微软雅黑") - dlGui.AddText("Center h30", "从以下任意可用地址中下载图片符号扩展包:") - dlGui.AddLink("xs", 'https://inputtip.pages.dev/download/extra') - dlGui.AddLink("xs", 'https://github.com/abgox/InputTip/releases/tag/extra') - dlGui.AddLink("xs", 'https://gitee.com/abgox/InputTip/releases/tag/extra') - dlGui.AddText(, "将其中的图片解压到 InputTipSymbol 目录中即可使用") - dlGui.Show() - gc.w.subGui := dlGui - } - tab.UseTab(4) - symbolBlockColorConfig := [{ - config: "CN_color", - options: "", - tip: "中文状态时方块符号的颜色", - colors: ["red", "#FF5555", "#F44336", "#D23600", "#FF1D23", "#D40D12", "#C30F0E", "#5C0002", "#450003"] - }, { - config: "EN_color", - options: "", - tip: "英文状态时方块符号的颜色", - colors: ["blue", "#528BFF", "#0EEAFF", "#59D8E6", "#2962FF", "#1B76FF", "#2C1DFF", "#1C3FFD", "#1510F0"] - }, { - config: "Caps_color", - options: "", - tip: "大写锁定时方块符号的颜色", - colors: ["green", "#4E9A06", "#96ED89", "#66BB6A", "#8BC34A", "#45BF55", "#43A047", "#2E7D32", "#33691E"] - }] - symbolBlockConfig := [{ - config: "transparent", - options: "Number Limit3", - tip: "方块符号的方块透明度" - }, { - config: "offset_x", - options: "", - tip: "方块符号的水平偏移量" - }, { - config: "offset_y", - options: "", - tip: "方块符号的垂直偏移量" - }, { - config: "symbol_height", - options: "Number", - tip: "方块符号的高度" - }, { - config: "symbol_width", - options: "Number", - tip: "方块符号的宽度" - }] - configGui.AddText("Section", "不同状态时方块符号的颜色可以设置为空,表示不显示对应的方块符号`n" line) - for v in symbolBlockColorConfig { - configGui.AddText("xs", v.tip ": ") - _g := configGui.AddComboBox("v" v.config " yp " v.options, v.colors) - _g.Text := readIni(v.config, "red") - _g.OnEvent("Change", fn_color_config) - fn_color_config(item, *) { - writeIni(item.Name, item.Text) + tab.UseTab(4) + symbolBlockColorConfig := [{ + config: "CN_color", + editOpt: "", + tip: "中文状态时方块符号的颜色", + colors: ["red", "#FF5555", "#F44336", "#D23600", "#FF1D23", "#D40D12", "#C30F0E", "#5C0002", "#450003"] + }, { + config: "EN_color", + editOpt: "", + tip: "英文状态时方块符号的颜色", + colors: ["blue", "#528BFF", "#0EEAFF", "#59D8E6", "#2962FF", "#1B76FF", "#2C1DFF", "#1C3FFD", "#1510F0"] + }, { + config: "Caps_color", + editOpt: "", + tip: "大写锁定时方块符号的颜色", + colors: ["green", "#4E9A06", "#96ED89", "#66BB6A", "#8BC34A", "#45BF55", "#43A047", "#2E7D32", "#33691E"] + }] + symbolBlockConfig := [{ + config: "transparent", + editOpt: "Number Limit3", + tip: "方块符号的方块透明度" + }, { + config: "offset_x", + editOpt: "", + tip: "方块符号的水平偏移量" + }, { + config: "offset_y", + editOpt: "", + tip: "方块符号的垂直偏移量" + }, { + config: "symbol_height", + editOpt: "Number", + tip: "方块符号的高度" + }, { + config: "symbol_width", + editOpt: "Number", + tip: "方块符号的宽度" + }] + g.AddText("Section", "1. 你应该首先查看") + g.AddText("yp cRed", "方块符号") + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddLink("xs", '2. 颜色设置为空,表示不显示对应的方块符号。 关于颜色配置') + g.AddText("xs", line) + for v in symbolBlockColorConfig { + g.AddText("xs", v.tip ": ") + _ := g.AddComboBox("yp " v.editOpt, v.colors) + _._config := v.config + _.Text := readIni(v.config, "red") + _.OnEvent("Change", e_color_config) + e_color_config(item, *) { + writeIni(item._config, item.Text) + hideSymbol() + updateSymbol() + reloadSymbol() + } + } + for v in symbolBlockConfig { + g.AddText("xs", v.tip ": ") + _ := g.AddEdit("yp " v.editOpt) + _._config := v.config + _.Value := readIni(v.config, 1) + _.OnEvent("Change", e_block_config) + e_block_config(item, *) { + value := item.value + if (item._config = "transparent") { + if (value = "") { + return + } + if (value > 255) { + value := 255 + } + } + writeIni(item._config, returnNumber(value)) + hideSymbol() + updateSymbol() + reloadSymbol() + } + } + symbolStyle := ["无", "样式1", "样式2", "样式3"] + g.AddText("xs", "方块符号的边框样式: ") + _ := g.AddDropDownList("yp AltSubmit", symbolStyle) + _.Value := readIni("border_type", "") + 1 + _.OnEvent("Change", e_border_config) + e_border_config(item, *) { + writeIni("border_type", item.value - 1) hideSymbol() updateSymbol() reloadSymbol() + if (symbolType = 2) { + gc._focusBlock.Focus() + } } - } - for v in symbolBlockConfig { - configGui.AddText("xs", v.tip ": ") - _g := configGui.AddEdit("v" v.config " yp " v.options) - _g.Value := readIni(v.config, 1) - _g.OnEvent("Change", fn_block_config) - fn_block_config(item, *) { - value := item.Value - if (item.Name = "transparent") { + g.AddText("yp w20") + gc._focusBlock := g.AddEdit("yp w1") + gc._focusBlock.OnEvent("Focus", fn_clear) + gc._focusBlock.OnEvent("LoseFocus", fn_clear) + + ; todo + g.AddText("xs", "是否启用") + g.AddText("yp cRed", "方块符号") + g.AddText("yp", "的独立配置: ") + g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + g.AddButton("xs w" bw, "设置方块符号在不同状态下的独立配置").OnEvent("Click", e_blockIsolateConfig) + e_blockIsolateConfig(*) { + + } + tab.UseTab(5) + g.AddText("Section", "1. 你应该首先查看") + g.AddText("yp cRed", "文本符号") + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddLink("xs", '2. 文本字符可以设置为空,表示不显示对应的文本字符。 关于颜色配置') + g.AddText("xs", line) + symbolTextConfig := [{ + config: "CN_Text", + textOpt: "xs", + editOpt: "", + tip: "中文状态时的文本字符" + }, { + config: "textSymbol_CN_color", + textOpt: "yp", + editOpt: "", + tip: "中文状态时的背景颜色" + }, { + config: "EN_Text", + textOpt: "xs", + editOpt: "", + tip: "英文状态时的文本字符" + }, { + config: "textSymbol_EN_color", + textOpt: "yp", + editOpt: "", + tip: "英文状态时的背景颜色" + }, { + config: "Caps_Text", + textOpt: "xs", + editOpt: "", + tip: "大写锁定时的文本字符" + }, { + config: "textSymbol_Caps_color", + textOpt: "yp", + editOpt: "", + tip: "大写锁定时的背景颜色" + }, { + config: "font_family", + textOpt: "xs", + editOpt: "", + tip: "文本符号的字符的字体" + }, { + config: "font_size", + textOpt: "yp", + editOpt: "Number", + tip: "文本符号的字符的大小" + }, { + config: "font_weight", + textOpt: "xs", + editOpt: "Number", + tip: "文本符号的字符的粗细" + }, { + config: "font_color", + textOpt: "yp", + editOpt: "", + tip: "文本符号的字符的颜色" + }, { + config: "textSymbol_offset_x", + textOpt: "xs", + editOpt: "", + tip: "文本符号的水平偏移量" + }, { + config: "textSymbol_offset_y", + textOpt: "yp", + editOpt: "", + tip: "文本符号的垂直偏移量" + }, { + config: "textSymbol_transparent", + textOpt: "xs", + editOpt: "Number Limit3", + tip: "文本符号的字符透明度" + }] + for v in symbolTextConfig { + g.AddText(v.textOpt, v.tip ": ") + _ := g.AddEdit("yp " v.editOpt) + _._config := v.config + _.Value := %v.config% + _.OnEvent("Change", e_text_config) + } + e_text_config(item, *) { + value := item.value + if (item._config = "textSymbol_transparent") { if (value = "") { return } if (value > 255) { value := 255 } + } else if (item._config = "textSymbol_offset_x" || item._config = "textSymbol_offset_y") { + value := returnNumber(value) } - writeIni(item.Name, returnNumber(value)) + writeIni(item._config, value) hideSymbol() updateSymbol() reloadSymbol() } - } - symbolStyle := ["无", "样式1", "样式2", "样式3"] - configGui.AddText("xs", "方块符号的边框样式: ") - _g := configGui.AddDropDownList("yp AltSubmit vborder_type", symbolStyle) - _g.Value := readIni("border_type", "") + 1 - _g.OnEvent("Change", fn_border_config) - fn_border_config(item, *) { - writeIni("border_type", item.Value - 1) - hideSymbol() - updateSymbol() - reloadSymbol() - } - tab.UseTab(5) - configGui.AddText("Section", "1. 不同状态时显示的文本字符可以设置为空,表示不显示对应的文本字符") - configGui.AddText("xs", "2. 当方块符号中的背景颜色设置为空时,对应的文本字符也不显示`n" line) - symbolCharConfig := [{ - config: "CN_Text", - opts: "xs", - options: "", - tip: "中文状态的文本字符" - }, { - config: "charSymbol_CN_color", - opts: "yp", - options: "", - tip: "中文状态的背景颜色" - }, { - config: "EN_Text", - opts: "xs", - options: "", - tip: "英文状态的文本字符" - }, { - config: "charSymbol_EN_color", - opts: "yp", - options: "", - tip: "英文状态的背景颜色" - }, { - config: "Caps_Text", - opts: "xs", - options: "", - tip: "大写锁定的文本字符" - }, { - config: "charSymbol_Caps_color", - opts: "yp", - options: "", - tip: "大写锁定的背景颜色" - }, { - config: "font_family", - opts: "xs", - options: "", - tip: "文本符号的字符字体" - }, { - config: "font_size", - opts: "yp", - options: "Number", - tip: "文本符号的字符大小" - }, { - config: "font_weight", - opts: "xs", - options: "Number", - tip: "文本符号的字符粗细" - }, { - config: "font_color", - opts: "yp", - options: "", - tip: "文本符号的字符颜色" - }, { - config: "charSymbol_transparent", - opts: "xs", - options: "Number Limit3", - tip: "文本符号的字符透明度" - }, { - config: "charSymbol_offset_x", - opts: "xs", - options: "", - tip: "文本符号的水平偏移量" - }, { - config: "charSymbol_offset_y", - opts: "xs", - options: "", - tip: "文本符号的垂直偏移量" - }] - for v in symbolCharConfig { - configGui.AddText(v.opts, v.tip ": ") - _g := configGui.AddEdit("v" v.config " yp " v.options) - _g.Value := %v.config% - _g.OnEvent("Change", fn_char_config) - } - fn_char_config(item, *) { - value := item.Value - if (item.Name = "charSymbol_transparent") { - if (value = "") { - return - } - if (value > 255) { - value := 255 + symbolStyle := ["无", "样式1", "样式2", "样式3"] + g.AddText("xs", "文本符号的边框样式: ") + _ := g.AddDropDownList("yp AltSubmit", symbolStyle) + _.Value := readIni("textSymbol_border_type", "") + 1 + _.OnEvent("Change", en_border_config2) + en_border_config2(item, *) { + writeIni("textSymbol_border_type", item.value - 1) + hideSymbol() + updateSymbol() + reloadSymbol() + if (symbolType = 3) { + gc._focusText.Focus() } - } else if (item.Name = "charSymbol_offset_x" || item.Name = "charSymbol_offset_y") { - value := returnNumber(value) } - writeIni(item.Name, value) - hideSymbol() - updateSymbol() - reloadSymbol() - } - symbolStyle := ["无", "样式1", "样式2", "样式3"] - configGui.AddText("xs", "文本符号的边框样式: ") - _g := configGui.AddDropDownList("yp AltSubmit vcharSymbol_border_type", symbolStyle) - _g.Value := readIni("charSymbol_border_type", "") + 1 - _g.OnEvent("Change", fn_border_config2) - fn_border_config2(item, *) { - writeIni("charSymbol_border_type", item.Value - 1) - hideSymbol() - updateSymbol() - reloadSymbol() - } - tab.UseTab(6) - configGui.AddText("Section", "1. 所有配置菜单的字体大小: ") - _g := configGui.AddEdit("yp Number Limit2") - _g.Value := readIni("gui_font_size", "12") - _g.OnEvent("Change", fn_change_gui_fs) - fn_change_gui_fs(item, *) { - if (item.Value = "" || item.Value < 5 || item.Value > 30) { - return - } - writeIni("gui_font_size", item.Value) - global fz := "s" item.Value - } - configGui.AddEdit("xs ReadOnly cGray -VScroll w" Gui_width, "取值范围: 5-30,超出范围的值无效,建议 12-20。`n如果觉得配置菜单的字体太大或太小,可以适当调整这个值,重新打开配置菜单即可。") + g.AddText("yp w20") + gc._focusText := g.AddEdit("yp w1") + gc._focusText.OnEvent("Focus", fn_clear) + gc._focusText.OnEvent("LoseFocus", fn_clear) + g.AddText() + ; todo + g.AddText("xs", "是否启用") + g.AddText("yp cRed", "文本符号") + g.AddText("yp", "的独立配置: ") + g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + g.AddButton("xs w" bw, "设置文本符号在不同状态下的独立配置").OnEvent("Click", e_textIsolateConfig) + e_textIsolateConfig(*) { - configGui.AddText("xs", "2. 点击下方按钮,实时显示当前激活的窗口进程信息") - configGui.AddText("yp", " ").GetPos(, , &__w) - gc._window_info := configGui.AddButton("xs w" Gui_width, "获取窗口进程信息") - gc._window_info.OnEvent("Click", fn_window_info) - configGui.AddText("xs cRed", "名称: ").GetPos(, , &_w) - _width := Gui_width - _w - configGui.MarginX + __w - gc.app_name := configGui.AddEdit("yp ReadOnly -VScroll w" _width) - configGui.AddText("xs cRed", "标题: ").GetPos(, , &_w) - gc.app_title := configGui.AddEdit("yp ReadOnly -VScroll w" _width) - configGui.AddText("xs cRed", "路径: ").GetPos(, , &_w) - gc.app_path := configGui.AddEdit("yp ReadOnly -VScroll w" _width) - fn_window_info(*) { - if (gc.timer) { - gc.timer := 0 - gc._window_info.Text := "获取窗口进程信息" - return } + tab.UseTab(6) + g.AddText("Section", "1. 所有配置菜单的字体大小: ") + _ := g.AddEdit("yp Number Limit2") + _.Value := readIni("gui_font_size", "12") + _.OnEvent("Change", e_change_gui_fs) + e_change_gui_fs(item, *) { + value := item.value + if (value = "" || value < 5 || value > 30) { + return + } + writeIni("gui_font_size", value) + global fontOpt := ["s" value, "微软雅黑"] + } + g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "取值范围: 5-30,超出范围的值无效,建议 12-20。`n如果觉得配置菜单的字体太大或太小,可以适当调整这个值,重新打开配置菜单即可。") + g.AddText("xs", "2. 点击下方按钮,实时显示当前激活的窗口进程信息") + g.AddText("yp", " ").GetPos(, , &__w) + gc._window_info := g.AddButton("xs w" bw, "获取窗口进程信息") + gc._window_info.OnEvent("Click", e_window_info) + g.AddText("xs cRed", "名称: ").GetPos(, , &_w) + _width := bw - _w - g.MarginX + __w + gc.app_name := g.AddEdit("yp ReadOnly -VScroll w" _width) + g.AddText("xs cRed", "标题: ").GetPos(, , &_w) + gc.app_title := g.AddEdit("yp ReadOnly -VScroll w" _width) + g.AddText("xs cRed", "路径: ").GetPos(, , &_w) + gc.app_path := g.AddEdit("yp ReadOnly -VScroll w" _width) + e_window_info(*) { + if (gc.timer) { + gc.timer := 0 + gc._window_info.Text := "获取窗口进程信息" + return + } - gc.timer := 1 - gc._window_info.Text := "停止获取" + gc.timer := 1 + gc._window_info.Text := "停止获取" - SetTimer(statusTimer, 25) - statusTimer() { - static first := "", last := "" + SetTimer(statusTimer, 25) + statusTimer() { + static first := "", last := "" - if (!gc.timer) { - SetTimer(, 0) - first := "" - last := "" - return - } + if (!gc.timer) { + SetTimer(, 0) + first := "" + last := "" + return + } + + try { + if (!first) { + name := WinGetProcessName("A") + title := WinGetTitle("A") + path := WinGetProcessPath("A") + gc.app_name.Value := name + gc.app_title.Value := title + gc.app_path.Value := path + first := name title path + } - try { - if (!first) { name := WinGetProcessName("A") title := WinGetTitle("A") path := WinGetProcessPath("A") + info := name title path + if (info = last || info = first) { + return + } gc.app_name.Value := name gc.app_title.Value := title gc.app_path.Value := path - first := name title path - } - - name := WinGetProcessName("A") - title := WinGetTitle("A") - path := WinGetProcessPath("A") - info := name title path - if (info = last || info = first) { - return + last := info } - gc.app_name.Value := name - gc.app_title.Value := title - gc.app_path.Value := path - last := info } } + g.OnEvent("Close", e_close) + e_close(*) { + g.Destroy() + gc.timer := 0 + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + } + gc.w.configGui := g + return g } - tab.UseTab(7) - configGui.AddText(, "1. 对于颜色相关的配置,建议使用 16 进制的颜色值`n2. 不过由于没有调色板,可能并不好设置`n3. 建议使用以下配色网站(也可以自己去找),找到喜欢的颜色,复制 16 进制值`n4. 显示的颜色以最终渲染的颜色效果为准") - configGui.AddLink(, 'https://colorhunt.co') - configGui.AddLink(, 'https://materialui.co/colors') - configGui.AddLink(, 'https://color.adobe.com/zh/create/color-wheel') - configGui.AddLink(, 'https://colordesigner.io/color-palette-builder') - - configGui.OnEvent("Close", fn_close) - fn_close(*) { - configGui.Destroy() - gc.timer := 0 - } - gc.w.configGui := configGui - configGui.Show() SetTimer(getDirTimer, -1) getDirTimer() { _cursorDir := arrJoin(getCursorDir(), ":") diff --git a/src/v2/menu/cursor-mode.ahk b/src/v2/menu/cursor-mode.ahk index 97a372d..b5586c4 100644 --- a/src/v2/menu/cursor-mode.ahk +++ b/src/v2/menu/cursor-mode.ahk @@ -1,27 +1,30 @@ fn_cursor_mode(*) { showGui() showGui(deep := "") { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.cursorModeGui) { - gc.w.cursorModeGui.Destroy() - gc.w.cursorModeGui := "" + if (gc.w.cursorModeGui) { + gc.w.cursorModeGui.Destroy() + gc.w.cursorModeGui := "" + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + } + createGui(modeGui).Show() + modeGui(info) { + g := createGuiOpt() + tab := g.AddTab3("-Wrap", ["设置光标获取模式", "关于"]) + tab.UseTab(1) + g.AddText("Section cRed", "你首先应该点击上方的「关于」查看具体的操作说明 ") - try { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } + if (info.i) { + return g } - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") + w := info.w bw := w - g.MarginX * 2 - tab := g.AddTab3("-Wrap", ["设置光标获取模式", "关于"]) - tab.UseTab(1) - g.AddLink("Section cRed", "你首先应该点击上方的「关于」查看具体的操作说明 ") gc.LV_add := g.AddListView("-LV0x10 -Multi r7 NoSortHdr Sort Grid w" w, ["应用进程列表", "窗口标题", "应用进程文件所在位置"]) - gc.LV_add.OnEvent("DoubleClick", fn_add) - fn_add(LV, RowNumber) { + gc.LV_add.OnEvent("DoubleClick", e_add) + e_add(LV, RowNumber) { handleClick(LV, RowNumber, "add") } res := [] @@ -87,9 +90,9 @@ fn_cursor_mode(*) { gc.%"LV_" v% := g.AddListView(opt " cRed -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 4, [v]) addItem(v) gc.%"LV_" v%.ModifyCol(1, "AutoHdr") - gc.%"LV_" v%.OnEvent("DoubleClick", fn_mode) + gc.%"LV_" v%.OnEvent("DoubleClick", e_mode) gc.%"LV_" v%._mode := v - fn_mode(LV, RowNumber) { + e_mode(LV, RowNumber) { handleClick(LV, RowNumber, LV._mode) } } @@ -98,15 +101,15 @@ fn_cursor_mode(*) { if (!RowNumber) { return } - RowText := LV.GetText(RowNumber) ; 从行的第一个字段中获取文本. - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } + exe_name := LV.GetText(RowNumber) + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { _handle(to) { - g_1.Destroy() + g.Destroy() gc.%"LV_" from%.Delete(RowNumber) if (from != "add") { v := gc.%from "_title"%.Value @@ -116,7 +119,7 @@ fn_cursor_mode(*) { value := readIni(config, "") res := "" for v in StrSplit(value, ":") { - if (Trim(v) && v != RowText) { + if (Trim(v) && v != exe_name) { res .= ":" v } } @@ -125,56 +128,60 @@ fn_cursor_mode(*) { config := "cursor_mode_" to value := readIni(config, "") - if (!InStr(":" value ":", ":" RowText ":")) { - gc.%"LV_" to%.Add(, RowText) + if (!InStr(":" value ":", ":" exe_name ":")) { + gc.%"LV_" to%.Add(, exe_name) v := gc.%to "_title"%.Value gc.%to "_title"%.Value := SubStr(v, 1, InStr(v, " ")) "( " gc.%"LV_" to%.GetCount() " 个 )" if (value) { - writeIni(config, value ":" RowText) + writeIni(config, value ":" exe_name) } else { - writeIni(config, RowText) + writeIni(config, exe_name) } } - updateWhiteList(RowText) + updateWhiteList(exe_name) updateCursorMode(config != "cursor_mode_JAB") } - g_1 := Gui("AlwaysOnTop") - g_1.SetFont(fz, "微软雅黑") - bw := w - g_1.MarginX * 2 - - g_1.AddLink(, "要将进程") - g_1.AddLink("yp cRed", RowText) - g_1.AddLink("yp", "添加到哪一个光标获取模式中?") + g := createGuiOpt() + g.AddText(, "要将进程") + g.AddText("yp cRed", exe_name) + g.AddText("yp", "添加到哪一个光标获取模式中?") if (useWhiteList) { - g_1.AddLink("xs cRed", "如果此应用不在白名单中,则会同步添加到白名单中") + g.AddText("xs cRed", "如果此应用不在白名单中,则会同步添加到白名单中") } + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + for i, v in modeNameList { opt := i = 1 || i = 5 ? "xs" : "yp" if (v = from) { opt .= " Disabled" } - _g := g_1.AddButton(opt " w" bw / 4, v) - _g._mode := v - _g.OnEvent("Click", fn_mode) - fn_mode(item, *) { + _ := g.AddButton(opt " w" bw / 4, v) + _._mode := v + _.OnEvent("Click", e_mode) + e_mode(item, *) { _handle(item._mode) } } if (from != "add") { - g_1.AddButton("xs w" w, "将它移除").OnEvent("Click", fn_rm) - fn_rm(*) { - g_1.Destroy() + g.AddButton("xs w" w, "将它移除").OnEvent("Click", e_rm) + e_rm(*) { + g.Destroy() LV.Delete(RowNumber) v := gc.%from "_title"%.Value gc.%from "_title"%.Value := SubStr(v, 1, InStr(v, " ")) "( " gc.%"LV_" from%.GetCount() " 个 )" try { - gc.LV_add.Add(, RowText, WinGetTitle("ahk_exe " RowText)) + gc.LV_add.Add(, exe_name, WinGetTitle("ahk_exe " exe_name)) } config := "cursor_mode_" from value := readIni(config, "") result := "" for v in StrSplit(value, ":") { - if (Trim(v) && v != RowText) { + if (Trim(v) && v != exe_name) { result .= ":" v } } @@ -183,122 +190,145 @@ fn_cursor_mode(*) { } } - g_1.AddButton("xs w" w, "取消操作").OnEvent("Click", no) - no(*) { - g_1.Destroy() + g.AddButton("xs w" w, "取消操作").OnEvent("Click", e_no) + e_no(*) { + g.Destroy() } - gc.w.subGui := g_1 - return g_1 + gc.w.subGui := g + return g } } - g.AddButton("xs w" w / 3, "刷新应用进程列表").OnEvent("Click", fn_refresh) - fn_refresh(*) { + g.AddButton("xs w" w / 3, "刷新应用进程列表").OnEvent("Click", e_refresh) + e_refresh(*) { fn_close() showGui(deep) } - g.AddButton("yp w" w / 3, "通过输入进程名称手动添加").OnEvent("Click", fn_add_by_hand) - fn_add_by_hand(*) { + g.AddButton("yp w" w / 3, "通过输入进程名称手动添加").OnEvent("Click", e_add_by_hand) + e_add_by_hand(*) { addApp("xxx.exe") addApp(v) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } - g_2 := Gui("AlwaysOnTop", "InputTip - 通过输入进程名称手动添加") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { + g := createGuiOpt("InputTip - 设置光标获取模式") + text := "每次只能添加一个应用进程名称" if (useWhiteList) { - g_2.AddLink("cRed", "如果此应用不在白名单中,则会同步添加到白名单中") + text .= "`n如果它不在白名单中,则会同步添加到白名单中" + } + g.AddText("cRed", text) + g.AddText("xs", "应用进程名称: ") + gc._exe_name := g.AddEdit("yp", "") + gc._exe_name.Value := v + g.AddText("xs cGray", "要将这个应用进程添加到哪一个光标获取模式中?") + + if (info.i) { + return g } - g_2.AddText(, "1. 进程名称应该是") - g_2.AddText("yp cRed", "xxx.exe") - g_2.AddText("yp", "这样的格式") - g_2.AddText("xs", "2. 每一次只能添加一个") - g_2.AddText("xs", "应用进程名称: ") - g_2.AddEdit("yp vexe_name", "").Value := v - g_2.AddText("xs cGray", "要将这个应用进程添加到下方哪一个光标获取模式中?") + w := info.w + bw := w - g.MarginX * 2 for i, v in modeNameList { opt := i = 1 || i = 5 ? "xs" : "yp" - _g := g_2.AddButton(opt " w" bw / 4, v) - _g._mode := v - _g.OnEvent("Click", fn_handle) - fn_handle(item, *) { - _handle(item._mode) - } - } + _ := g.AddButton(opt " w" bw / 4, v) + _._mode := v + _.OnEvent("Click", e_handle) + e_handle(item, *) { + to := item._mode + exe_name := gc._exe_name.value + g.Destroy() + if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "是一个错误的应用进程名称") + g.AddText("xs cRed", '正确的应用进程名称是 xxx.exe 这样的格式`n同时文件名中不能包含这些英文符号 \ / : * ? " < >|') - _handle(to) { - exe_name := g_2.Submit().exe_name - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || InStr(exe_name, ":")) { - createGui(fn).Show() - fn(x, y, w, h) { - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText(, "进程名称不符合格式要求,请重新输入") - y := g_2.AddButton("w" bw, "我知道了") - y.OnEvent("click", close) - y.Focus() - close(*) { - g_2.Destroy() - addApp(exe_name) + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + y := g.AddButton("xs w" bw, "重新输入") + y.Focus() + y.OnEvent("click", e_close) + e_close(*) { + g.Destroy() + addApp(exe_name) + } + gc.w.subGui := g + return g } - return g_2 + return } - return - } - config := "cursor_mode_" to - value := readIni(config, "") + config := "cursor_mode_" to + value := readIni(config, "") - if (InStr(":" value ":", ":" exe_name ":")) { - createGui(fn1).Show() - fn1(x, y, w, h) { - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText("cRed", exe_name) - g_2.AddText("yp", "已经存在,请重新输入") - g_2.AddButton("xs w" bw, "重新输入").OnEvent("click", close) - close(*) { - g_2.Destroy() - addApp(exe_name) + if (InStr(":" value ":", ":" exe_name ":")) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" } - return g_2 + createGui(existGui).Show() + existGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "这个应用进程已经存在了") + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("xs w" bw, "重新输入").OnEvent("click", e_close) + e_close(*) { + g.Destroy() + addApp(exe_name) + } + gc.w.subGui := g + return g + } + return } - return - } - gc.%"LV_" to%.Add(, exe_name) - v := gc.%to "_title"%.Value - gc.%to "_title"%.Value := SubStr(v, 1, InStr(v, " ")) "( " gc.%"LV_" to%.GetCount() " 个 )" - if (value) { - writeIni(config, value ":" exe_name) - } else { - writeIni(config, exe_name) + gc.%"LV_" to%.Add(, exe_name) + v := gc.%to "_title"%.Value + gc.%to "_title"%.Value := SubStr(v, 1, InStr(v, " ")) "( " gc.%"LV_" to%.GetCount() " 个 )" + if (value) { + writeIni(config, value ":" exe_name) + } else { + writeIni(config, exe_name) + } + updateWhiteList(exe_name) + updateCursorMode(config != "cursor_mode_JAB") } - updateWhiteList(exe_name) - updateCursorMode(config != "cursor_mode_JAB") } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } } } if (deep) { - g.AddButton("yp w" w / 3, "显示更少进程(仅前台窗口)").OnEvent("Click", fn_less_window) - fn_less_window(*) { + g.AddButton("yp w" w / 3, "显示更少进程(仅前台窗口)").OnEvent("Click", e_less_window) + e_less_window(*) { fn_close() showGui("") } } else { - g.AddButton("yp w" w / 3, "显示更多进程(后台窗口)").OnEvent("Click", fn_more_window) - fn_more_window(*) { + g.AddButton("yp w" w / 3, "显示更多进程(后台窗口)").OnEvent("Click", e_more_window) + e_more_window(*) { fn_close() showGui(1) } @@ -309,10 +339,14 @@ fn_cursor_mode(*) { gc.LV_add.ModifyCol(3, "AutoHdr") tab.UseTab(2) g.AddEdit("ReadOnly -VScroll w" w, '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到下方任意列表中`n - 如果需要更多的进程,请点击下方的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击下方的「通过输入进程名称手动添加」直接添加进程名称`n - 下方分别是 InputTip 的多种光标获取模式`n - 不用在意这些模式是啥,只要记住,哪个能用,就用哪个即可`n - 如果很想了解相关内容,请查看下方相关链接`n - 这几个模式列表中的应用进程会使用对应的模式尝试去获取光标位置`n - 双击列表中任意应用进程,就可以将它移除或者添加到其他列表中`n - 白名单机制下,选择添加且此应用不在白名单中,则会同步添加到白名单中`n`n2. 什么时候需要去添加?`n - 当你发现一个应用窗口,无法获取到光标位置,或者有兼容性问题时`n - 就可以尝试将其添加到下方的各个列表中,看哪个模式是可用的且无兼容性问题的`n - 如果所有模式都不可用,则表示在此窗口中获取不到光标位置,暂时无法解决`n - 如果已知都不可用,记得移除这个应用进程`n`n3. JetBrains 系列 IDE`n - JetBrains 系列 IDE 需要添加到「JAB」列表中`n - 如果未生效,请检查是否完成「启用 JAB/JetBrains IDE 支持」中的所有操作步骤') - g.AddLink(, '相关链接: 关于光标获取模式') + g.AddLink(, '相关链接: 关于光标获取模式') g.OnEvent("Close", fn_close) fn_close(*) { g.Destroy() + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } } gc.w.cursorModeGui := g return g diff --git a/src/v2/menu/input-mode.ahk b/src/v2/menu/input-mode.ahk index 83ba04d..97db6f1 100644 --- a/src/v2/menu/input-mode.ahk +++ b/src/v2/menu/input-mode.ahk @@ -1,83 +1,94 @@ fn_input_mode(*) { - createGui(fn).Show() - fn(x, y, w, h) { - global statusModeEN, conversionModeEN, evenStatusModeEN, evenConversionModeEN, mode, checkTimeout, gc - - if (gc.w.inputModeGui) { - gc.w.inputModeGui.Destroy() - gc.w.inputModeGui := "" - try { - gc.w.customModeGui.Destroy() - gc.w.customModeGui := "" - } - try { - gc.w.shiftSwitchGui.Destroy() - gc.w.shiftSwitchGui := "" - } + if (gc.w.inputModeGui) { + gc.w.inputModeGui.Destroy() + gc.w.inputModeGui := "" + try { + gc.w.customModeGui.Destroy() + gc.w.customModeGui := "" } - g := Gui("AlwaysOnTop", "InputTip - 设置输入法模式") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 + try { + gc.w.shiftSwitchGui.Destroy() + gc.w.shiftSwitchGui := "" + } + } + createGui(inputModeGui).Show() + inputModeGui(info) { + global statusModeEN, conversionModeEN, mode statusModeEN := readIni("statusModeEN", "", "InputMethod") conversionModeEN := readIni("conversionModeEN", "", "InputMethod") mode := readIni("mode", 1, "InputMethod") + g := createGuiOpt("InputTip - 设置输入法模式") gc.modeList := ["【自定义】", "【通用】"] tab := g.AddTab3("-Wrap", ["基础配置", "自定义", "关于自定义"]) tab.UseTab(1) g.AddText("Section cRed", "如果【通用】模式不可用,需要前往「自定义」标签页去配置【自定义】模式") g.AddText(, "1. 当前使用的输入法模式:") + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + gc.mode := g.AddText("yp cRed w" w / 2) gc.mode.Value := gc.modeList[mode + 1] g.AddText("xs", "2. 设置获取输入法状态的超时时间: ") - timeout := g.AddEdit("yp Number Limit5 vcheckTimeout", "") + timeout := g.AddEdit("yp Number Limit5") timeout.Focus() - timeout.OnEvent("Change", fn_change_timeout) - fn_change_timeout(item, *) { - if (item.value != "") { - writeIni("checkTimeout", item.value, "InputMethod") - checkTimeout := item.value - restartJetBrains() + timeout.OnEvent("Change", e_setTimeout) + e_setTimeout(item, *) { + value := item.value + if (value = "") { + return } + writeIni("checkTimeout", value, "InputMethod") + global checkTimeout := value + restartJetBrains() } timeout.Value := checkTimeout g.AddEdit("xs ReadOnly cGray -VScroll w" w, "单位:毫秒,默认 500 毫秒。`n每次切换输入法状态,InputTip 会从系统获取新的输入法状态。`n如果超过了这个时间,则认为获取失败,直接显示英文状态。`n它可能是有时识别不到输入法状态的原因,遇到问题可以尝试调节它。") g.AddText("xs", "3. Shift 按键是否可以正常切换输入法状态") - gc.useShift := g.AddDropDownList("yp vuseShift Choose" useShift + 1, ["【否】(慎重选择)", "【是】"]) - gc.useShift.OnEvent("Change", fn_change_useShift) - fn_change_useShift(item, *) { - if (useShift = item.Value) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.shiftSwitchGui) { - gc.w.shiftSwitchGui.Destroy() - gc.w.shiftSwitchGui := "" - } + gc.useShift := g.AddDropDownList("yp Choose" useShift + 1, ["【否】(慎重选择)", "【是】"]) + gc.useShift.OnEvent("Change", e_useShift) + e_useShift(item, *) { + if (useShift = item.value) { + if (gc.w.shiftSwitchGui) { + gc.w.shiftSwitchGui.Destroy() + gc.w.shiftSwitchGui := "" + } + createGui(warningGui).Show() + warningGui(info) { gc.useShift.Value := useShift + 1 - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 + + g := createGuiOpt() g.AddText("cRed", "确定要使用【否】吗?") g.AddText("cRed", "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘或部分特殊输入法中,可能会导致状态提示间歇性错误。") g.AddText("cRed", "建议不要使用【否】,而是启用 Shift 切换状态,这也是几乎所有输入法的默认设置。") - g.AddButton("w" bw, "我确定要使用【否】").OnEvent("Click", yes) - g.AddButton("w" bw, "不,我只是误点了").OnEvent("Click", no) - g.OnEvent("Close", no) - yes(*) { + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("w" bw, "我确定要使用【否】").OnEvent("Click", e_yes) + g.AddButton("w" bw, "不,我只是误点了").OnEvent("Click", e_no) + e_yes(*) { g.Destroy() gc.useShift.Value := 1 writeIni("useShift", 0) global useShift := 0 } - no(*) { + e_no(*) { g.Destroy() } gc.w.shiftSwitchGui := g return g } } else { - value := item.Value - 1 + value := item.value - 1 writeIni("useShift", value) global useShift := value restartJetBrains() @@ -93,11 +104,11 @@ fn_input_mode(*) { g.AddText("Section", "1.") g.AddText("yp cRed", "英文状态") g.AddText("yp", "的状态码数字: ") - gc.statusModeEN := g.AddEdit("yp vstatusMode", "") + gc.statusModeEN := g.AddEdit("yp", "") gc.statusModeEN.Value := Trim(StrReplace(statusModeEN, ":", " ")) - gc.statusModeEN.OnEvent("Change", fn_change_statusModeEN) - fn_change_statusModeEN(item, *) { - if (Trim(item.Value) = "") { + gc.statusModeEN.OnEvent("Change", e_statusModeEN) + e_statusModeEN(item, *) { + if (Trim(item.value) = "") { writeIni("statusModeEN", "", "InputMethod") statusModeEN := "" } else { @@ -127,13 +138,13 @@ fn_input_mode(*) { } } - handle_mode(v, c, box, d) { - if (v) { - gc.%box%.Value := 0 - writeIni(c, d, "InputMethod") + handle_mode(value, config, checkbox, default) { + if (value) { + gc.%checkbox%.value := 0 + writeIni(config, default, "InputMethod") } else { - if (!gc.%box%.Value) { - writeIni(c, "", "InputMethod") + if (!gc.%checkbox%.value) { + writeIni(config, "", "InputMethod") } } global evenStatusModeEN := readIni("evenStatusModeEN", "", "InputMethod") @@ -149,27 +160,27 @@ fn_input_mode(*) { if (evenStatusModeEN != "") { gc.oddStatusMode.Value := !evenStatusModeEN } - gc.oddStatusMode.OnEvent("Click", fn_oddStatusMode) - fn_oddStatusMode(item, *) { - handle_mode(item.Value, "evenStatusModeEN", "evenStatusMode", 0) + gc.oddStatusMode.OnEvent("Click", e_oddStatusMode) + e_oddStatusMode(item, *) { + handle_mode(item.value, "evenStatusModeEN", "evenStatusMode", 0) } gc.evenStatusMode := g.AddCheckbox("yp", "使用偶数") if (evenStatusModeEN != "") { gc.evenStatusMode.Value := evenStatusModeEN } - gc.evenStatusMode.OnEvent("Click", fn_evenStatusMode) - fn_evenStatusMode(item, *) { - handle_mode(item.Value, "evenStatusModeEN", "oddStatusMode", 1) + gc.evenStatusMode.OnEvent("Click", e_evenStatusMode) + e_evenStatusMode(item, *) { + handle_mode(item.value, "evenStatusModeEN", "oddStatusMode", 1) } g.AddText("xs", "3.") g.AddText("yp cRed", "英文状态") g.AddText("yp", "的切换码数字: ") - gc.conversionModeEN := g.AddEdit("yp vconversionMode", "") + gc.conversionModeEN := g.AddEdit("yp") gc.conversionModeEN.Value := Trim(StrReplace(conversionModeEN, ":", " ")) - gc.conversionModeEN.OnEvent("Change", fn_change_conversionModeEN) - fn_change_conversionModeEN(item, *) { - if (Trim(item.Value) = "") { + gc.conversionModeEN.OnEvent("Change", e_conversionModeEN) + e_conversionModeEN(item, *) { + if (Trim(item.value) = "") { writeIni("conversionModeEN", "", "InputMethod") conversionModeEN := "" } else { @@ -191,30 +202,30 @@ fn_input_mode(*) { if (evenConversionModeEN != "") { gc.oddConversionMode.Value := !evenConversionModeEN } - gc.oddConversionMode.OnEvent("Click", fn_oddConversionMode) - fn_oddConversionMode(item, *) { - handle_mode(item.Value, "evenConversionModeEN", "evenConversionMode", 0) + gc.oddConversionMode.OnEvent("Click", e_oddConversionMode) + e_oddConversionMode(item, *) { + handle_mode(item.value, "evenConversionModeEN", "evenConversionMode", 0) } gc.evenConversionMode := g.AddCheckbox("yp", "使用偶数") if (evenConversionModeEN != "") { gc.evenConversionMode.Value := evenConversionModeEN } - gc.evenConversionMode.OnEvent("Click", fn_evenConversionMode) - fn_evenConversionMode(item, *) { - handle_mode(item.Value, "evenConversionModeEN", "oddConversionMode", 1) + gc.evenConversionMode.OnEvent("Click", e_evenConversionMode) + e_evenConversionMode(item, *) { + handle_mode(item.value, "evenConversionModeEN", "oddConversionMode", 1) } - gc.status_btn := g.AddButton("xs w" w, "显示实时的状态码和切换码") - gc.status_btn.OnEvent("Click", showStatus) - showStatus(*) { + gc.status_btn := g.AddButton("xs w" w, "【显示】实时的状态码和切换码") + gc.status_btn.OnEvent("Click", e_showStatus) + e_showStatus(*) { if (gc.timer) { gc.timer := 0 - gc.status_btn.Text := "显示实时的状态码和切换码" + gc.status_btn.Text := "【显示】实时的状态码和切换码" return } gc.timer := 1 - gc.status_btn.Text := "关闭实时的状态码和切换码" + gc.status_btn.Text := "【关闭】实时的状态码和切换码" SetTimer(statusTimer, 25) statusTimer() { @@ -231,13 +242,19 @@ fn_input_mode(*) { tab.UseTab(3) g.AddEdit("Section r12 ReadOnly w" w, "如何配置【自定义】模式?以讯飞输入法为例:`n1. 点击按钮「显示实时的状态码和切换码」,它会在光标处显示状态码和切换码。`n2. 来回切换输入法的中英文状态观察它们的变化。`n3. 会发现切换码始终为 1,而状态码在英文时为 1,中文时为 2。`n4. 于是,在状态码数字的输入框中填入 1,就会发现已经生效了。`n5. 这里更推荐勾选状态码规则中的「使用奇数」,它包含 1,且范围更大。`n6. 再比如小狼毫(rime)输入法,按照同样的操作流程,你会发现很大的不同。`n7. 它的状态码始终为 1,而切换码在英文时是随机的偶数,中文时是随机的奇数。`n8. 于是,勾选切换码规则中的「使用偶数」后,就会发现已经生效了。`n9. 当然,不要盲目的使用规则扩大范围,比如手心输入法就不能这样做。`n10. 当使用手心输入法按照同样的流程操作时,你会发现又有不同。`n11. 手心输入法的状态码始终为 1,而切换码在英文时为 1,中文时为 1025。`n12. 于是,在状态码数字的输入框中填入 1,就会发现已经生效了。`n13. 但是,这里就不能勾选「使用奇数」,因为中文时的 1025 也是奇数。`n14. 【自定义】模式是靠唯一的值去区分状态,勾选「使用奇数」就无法区分了。`n`n什么是优先级顺序?`n1. 优先级顺序: 切换码规则(4) > 切换码数字(3) > 状态码规则(2) > 状态码数字(1)`n2. 对于【自定义】模式来说,生效的是优先级最高的配置项。`n3. 比如: 你使用了切换码规则,则切换码数字/状态码规则/状态码数字即使有值,也无效。`n`n在数字输入框中,是可以填入许多个的:`n1. 有可能你会遇到这样的情况。`n2. 你发现状态码在英文时不唯一,有时为 0,有时为 3,在中文时为 1。`n3. 这种情况,一个奇数,一个偶数,也无法使用规则。`n4. 你可以直接在状态码数字的输入框中填入它们,以空格分割即可。") - - g.AddLink(, '此处的帮助说明无法动态更新,建议前往 官网 查看最新的观感更好的帮助说明文档') - - g.OnEvent("Close", fn_close) - fn_close(*) { + g.AddLink(, '相关链接: 自定义模式') + g.OnEvent("Close", e_close) + e_close(*) { g.Destroy() gc.timer := 0 + try { + gc.w.customModeGui.Destroy() + gc.w.customModeGui := "" + } + try { + gc.w.shiftSwitchGui.Destroy() + gc.w.shiftSwitchGui := "" + } } gc.w.inputModeGui := g return g diff --git a/src/v2/menu/pause-key.ahk b/src/v2/menu/pause-key.ahk index 2209426..b09aeb5 100644 --- a/src/v2/menu/pause-key.ahk +++ b/src/v2/menu/pause-key.ahk @@ -3,102 +3,95 @@ fn_pause_key(*) { gc.w.pauseHotkeyGui.Destroy() gc.w.pauseHotkeyGui := "" } - line := "---------------------------------------------------------------------------------" - hotkeyGui := Gui("AlwaysOnTop") - hotkeyGui.SetFont(fz, "微软雅黑") - hotkeyGui.AddText(, line) - hotkeyGui.Show("Hide") - hotkeyGui.GetPos(, , &Gui_width) - hotkeyGui.Destroy() + line := "----------------------------------------------------------------------------------" + createGui(pauseKeyGui).Show() + pauseKeyGui(info) { + g := createGuiOpt("InputTip - 设置暂停/运行快捷键的快捷键") + tab := g.AddTab3("-Wrap", ["设置组合快捷键", "手动输入快捷键"]) + tab.UseTab(1) + g.AddText("Section", "1.") + g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") + g.AddText("xs", "2. 直接按下快捷键即可设置,除非快捷键被占用,需要使用「手动输入快捷键」") + g.AddText("xs", "3. 使用 Backspace(退格键) 或 Delete(删除键) 可以清除快捷键") + g.AddText("xs", "4. 通过勾选右边的 Win 键来表示快捷键中需要加入 Win 修饰键`n" line) - hotkeyGui := Gui("AlwaysOnTop", "InputTip - 设置暂停/运行快捷键的快捷键") - hotkeyGui.SetFont(fz, "微软雅黑") - - bw := Gui_width - hotkeyGui.MarginX * 2 - - tab := hotkeyGui.AddTab3("-Wrap", ["设置组合快捷键", "手动输入快捷键"]) - tab.UseTab(1) - hotkeyGui.AddText("Section", "1. 直接按下快捷键即可设置,除非快捷键被占用,需要使用「手动输入快捷键」") - hotkeyGui.AddText("xs", "2. 使用 Backspace(退格键) 或 Delete(删除键) 可以清除快捷键") - hotkeyGui.AddText("xs", "3. 通过勾选右边的 Win 键来表示快捷键中需要加入 Win 修饰键`n" line) + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 - hotkeyGui.AddText("xs", "设置") - hotkeyGui.AddText("yp cRed", "暂停/运行") - hotkeyGui.AddText("yp", "的快捷键: ") - value := readIni('hotkey_Pause', '') - gc.hotkey_Pause := hotkeyGui.AddHotkey("yp vhotkey_Pause", StrReplace(value, "#", "")) + g.AddText("xs", "设置") + g.AddText("yp cRed", "暂停/运行") + g.AddText("yp", "的快捷键: ") - gc.hotkey_Pause.OnEvent("Change", fn_change_hotkey1) - fn_change_hotkey1(item, *) { - ; 同步修改到「手动输入快捷键」 - v := item.Value - if (gc.win.Value) { - v := "#" v - } - gc.%item.Name "2"%.Value := v - } - gc.win := hotkeyGui.AddCheckbox("yp vwin", "Win 键") - gc.win.OnEvent("Click", fn_win_key) - fn_win_key(item, *) { - ; 同步修改到「手动输入快捷键」 - v := gc.hotkey_Pause.Value - if (item.Value) { - gc.hotkey_Pause2.Value := "#" v - } else { + value := readIni('hotkey_Pause', '') + gc.hotkey_Pause := g.AddHotkey("yp", StrReplace(value, "#", "")) + gc.hotkey_Pause.OnEvent("Change", e_change_hotkey) + e_change_hotkey(item, *) { + ; 同步修改到「手动输入快捷键」 + v := item.value + if (gc.win.Value) { + v := "#" v + } gc.hotkey_Pause2.Value := v } - } - - gc.win.Value := InStr(value, "#") ? 1 : 0 - hotkeyGui.AddButton("xs w" bw, "确定").OnEvent("Click", yes) - yes(*) { - if (hotkeyGui.Submit().win) { - key := "#" hotkeyGui.Submit().hotkey_Pause - } else { - key := hotkeyGui.Submit().hotkey_Pause + gc.win := g.AddCheckbox("yp", "Win 键") + gc.win.OnEvent("Click", e_win_key) + e_win_key(item, *) { + ; 同步修改到「手动输入快捷键」 + v := gc.hotkey_Pause.Value + if (item.value) { + gc.hotkey_Pause2.Value := "#" v + } else { + gc.hotkey_Pause2.Value := v + } } - writeIni("hotkey_Pause", key) - fn_restart() - } - tab.UseTab(2) - hotkeyGui.AddLink("Section", "1.") - hotkeyGui.AddLink("yp cRed", "优先使用「设置组合快捷键」进行设置,除非因为快捷键占用无法设置") - hotkeyGui.AddLink("xs", '2. 你需要首先查看 如何手动输入快捷键') - hotkeyGui.AddLink("xs", '3. 建议先使用「设置组合快捷键」,然后回到此处适当修改`n' line) - hotkeyGui.AddText("xs", "设置") - hotkeyGui.AddText("yp cRed", "暂停/运行") - hotkeyGui.AddText("yp", "的快捷键: ") - value := readIni('hotkey_Pause', '') - gc.hotkey_Pause2 := hotkeyGui.AddEdit("yp vhotkey_Pause2") - gc.hotkey_Pause2.Value := readIni("hotkey_Pause", '') - gc.hotkey_Pause2.OnEvent("Change", fn_change_hotkey2) - fn_change_hotkey2(item, *) { - gc.win.Value := InStr(item.Value, "#") ? 1 : 0 - if (item.Value ~= "^~\w+\sUp$") { - gc.hotkey_Pause.Value := "" - } else { - ; 当输入的快捷键符合组合快捷键时,同步修改 - try { - gc.hotkey_Pause.Value := StrReplace(item.Value, "#", "") - } catch { + gc.win.Value := InStr(value, "#") ? 1 : 0 + + tab.UseTab(2) + g.AddText("Section", "1.") + g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") + g.AddText("xs", "2.") + g.AddText("yp cRed", "优先使用「设置组合快捷键」进行设置,除非因为快捷键占用无法设置") + g.AddLink("xs", '3. 你需要首先查看 如何手动输入快捷键') + g.AddText("xs", '4. 建议先使用「设置组合快捷键」,然后回到此处适当修改`n' line) + g.AddText("xs", "设置") + g.AddText("yp cRed", "暂停/运行") + g.AddText("yp", "的快捷键: ") + value := readIni('hotkey_Pause', '') + + gc.hotkey_Pause2 := g.AddEdit("yp") + gc.hotkey_Pause2.Value := readIni("hotkey_Pause", '') + gc.hotkey_Pause2.OnEvent("Change", e_change_hotkey2) + e_change_hotkey2(item, *) { + gc.win.Value := InStr(item.value, "#") ? 1 : 0 + if (item.value ~= "^~\w+\sUp$") { gc.hotkey_Pause.Value := "" + } else { + ; 当输入的快捷键符合组合快捷键时,同步修改 + try { + gc.hotkey_Pause.Value := StrReplace(item.value, "#", "") + } catch { + gc.hotkey_Pause.Value := "" + } } } - } - hotkeyGui.AddButton("xs w" bw, "确定").OnEvent("Click", yes2) - yes2(*) { - if (hotkeyGui.Submit().win) { - key := "#" hotkeyGui.Submit().hotkey_Pause2 - } else { - key := hotkeyGui.Submit().hotkey_Pause2 + tab.UseTab(0) + + g.AddButton("Section w" bw, "确定").OnEvent("Click", e_yes) + e_yes(*) { + value := gc.hotkey_Pause.value + if (gc.win.Value) { + key := "#" value + } else { + key := value + } + writeIni("hotkey_Pause", key) + fn_restart() } - writeIni("hotkey_Pause", key) - fn_restart() - } - hotkeyGui.OnEvent("Close", fn_close) - fn_close(*) { - hotkeyGui.Destroy() + + gc.w.pauseHotkeyGui := g + return g } - gc.w.pauseHotkeyGui := hotkeyGui - hotkeyGui.Show() } diff --git a/src/v2/menu/startup.ahk b/src/v2/menu/startup.ahk index a8407f6..ed2b916 100644 --- a/src/v2/menu/startup.ahk +++ b/src/v2/menu/startup.ahk @@ -11,87 +11,111 @@ fn_startup(item, *) { isStartUp := 0 writeIni("isStartUp", isStartUp) - createGui(_fn).Show() - _fn(x, y, w, h) { - if (gc.w.startupGui) { - gc.w.startupGui.Destroy() - gc.w.startupGui := "" - } - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") + if (gc.w.startupGui) { + gc.w.startupGui.Destroy() + gc.w.startupGui := "" + } + createGui(cancelGui).Show() + cancelGui(info) { + g := createGuiOpt() g.AddText(, "InputTip 的") g.AddText("yp cRed", "开机自启动") g.AddText("yp", "已取消") g.AddText("xs", "可通过「托盘菜单」=>「开机自启动」再次启用") + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + y := g.AddButton("w" w, "我知道了") - y.OnEvent("Click", yes) y.Focus() - g.OnEvent("Close", yes) - yes(*) { + y.OnEvent("Click", e_yes) + e_yes(*) { g.Destroy() } gc.w.startupGui := g return g } } else { - if (A_IsAdmin) { - isDisabled := '' - pad := '' - } else { - isDisabled := ' Disabled' - pad := ' (以管理员模式运行时可用)' + if (gc.w.startupGui) { + gc.w.startupGui.Destroy() + gc.w.startupGui := "" } - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.startupGui) { - gc.w.startupGui.Destroy() - gc.w.startupGui := "" + createGui(startupGui).Show() + startupGui(info) { + g := createGuiOpt("InputTip - 设置开机自启动") + g.AddLink(, '详情请查看: 关于开机自启动') + g.AddText(, "---------------------------------------------------------------------") + if (info.i) { + return g } - g := Gui("AlwaysOnTop +OwnDialogs", "设置开机自启动") - g.SetFont(fz, "微软雅黑") - g.AddLink(, '详情请查看: 关于开机自启动 `n') + w := info.w + bw := w - g.MarginX * 2 + g.AddEdit("xs ReadOnly -VScroll w" w, "1. 当前有多种方式设置开机自启动,请选择有效的方式 :`n - 通过「任务计划程序」`n - 通过应用快捷方式`n - 通过添加「注册表」`n`n2. 如何避免管理员授权窗口(UAC)的干扰?`n - 使用「任务计划程序」`n - 将系统设置中的「更改用户账户控制设置」修改为【从不通知】`n") - btn := g.AddButton("w" w isDisabled, "使用「任务计划程序」" pad) + if (A_IsAdmin) { + btnOpt := '' + tip := '' + } else { + btnOpt := ' Disabled ' + tip := ' (以管理员模式运行时可用)' + } + btn := g.AddButton("w" w btnOpt, "使用「任务计划程序」" tip) btn.Focus() - btn.OnEvent("Click", fn_startUp_task) - fn_startUp_task(*) { + btn.OnEvent("Click", e_useTask) + e_useTask(*) { isStartUp := 1 - FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", A_Startup "\" fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , favicon, , , 7) + FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", A_Startup "\" fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , A_ScriptFullPath, , , 7) fn_handle() } btn := g.AddButton("w" w, "使用应用快捷方式") if (!A_IsAdmin) { btn.Focus() } - btn.OnEvent("Click", fn_startUp_lnk) - fn_startUp_lnk(*) { + btn.OnEvent("Click", e_useLnk) + e_useLnk(*) { isStartUp := 2 - FileCreateShortcut(A_ScriptFullPath, A_Startup "\" fileLnk, , , , favicon, , , 7) + FileCreateShortcut(A_ScriptFullPath, A_Startup "\" fileLnk, , , , A_ScriptFullPath, , , 7) fn_handle() } - g.AddButton("w" w isDisabled, "使用「注册表」" pad).OnEvent("Click", fn_startUp_reg) - fn_startUp_reg(*) { + g.AddButton("w" w btnOpt, "使用「注册表」" tip).OnEvent("Click", e_useReg) + e_useReg(*) { isStartUp := 3 try { RegWrite(A_ScriptFullPath, "REG_SZ", "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run", A_ScriptName) fn_handle() } catch { - fn_handle(1) - MsgBox("添加注册表失败!", , "0x1000 0x10") + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() + g.AddText("cRed", "添加注册表失败!") + g.AddText("cRed", "你需要考虑使用其他方式设置开机自启动") + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("w" bw, "我知道了").OnEvent("Click", e_close) + e_close(*) { + g.Destroy() + } + gc.w.subGui := g + return g + } } } - g.OnEvent("Close", fn_handle) - fn_handle(err := 0, *) { + fn_handle(*) { g.Destroy() - if (!err) { - if (isStartUp) { - A_TrayMenu.Check(item) - } else { - A_TrayMenu.Uncheck(item) - } - writeIni("isStartUp", isStartUp) - } + A_TrayMenu.Check(item) + writeIni("isStartUp", isStartUp) } gc.w.startupGui := g return g diff --git a/src/v2/menu/switch-key.ahk b/src/v2/menu/switch-key.ahk index cc38852..e23c166 100644 --- a/src/v2/menu/switch-key.ahk +++ b/src/v2/menu/switch-key.ahk @@ -4,202 +4,164 @@ fn_switch_key(*) { gc.w.switchKeyGui := "" } line := "----------------------------------------------------------------------------------------" - hotkeyGui := Gui("AlwaysOnTop") - hotkeyGui.SetFont(fz, "微软雅黑") - hotkeyGui.AddText(, line) - hotkeyGui.Show("Hide") - hotkeyGui.GetPos(, , &Gui_width) - hotkeyGui.Destroy() + createGui(keyGui).Show() + keyGui(info) { + g := createGuiOpt("InputTip - 设置强制切换输入法状态的快捷键") + tab := g.AddTab3("-Wrap", ["设置单键", "设置组合快捷键", "手动输入快捷键"]) + tab.UseTab(1) + g.AddText("Section", "1.") + g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") + g.AddText("xs", "2. LShift 指的是左边的 Shift 键,RShift 指的是右边的 Shift 键,其他按键以此类推") + g.AddText("xs", "3. 单键不会覆盖原本的按键功能,因为在设置的单键抬起时才会触发强制切换") - hotkeyGui := Gui("AlwaysOnTop", "InputTip - 设置强制切换输入法状态的快捷键") - hotkeyGui.SetFont(fz, "微软雅黑") - - bw := Gui_width - hotkeyGui.MarginX * 2 - - tab := hotkeyGui.AddTab3("-Wrap", ["设置单键", "设置组合快捷键", "手动输入快捷键"]) - tab.UseTab(1) - hotkeyGui.AddText("Section", "1. LShift 指的是左边的 Shift 键,RShift 指的是右边的 Shift 键,以此类推") - hotkeyGui.AddText("xs", "2. 单键不会覆盖原本的按键功能,因为在设置的单键抬起时才会触发强制切换") - hotkeyGui.AddText("xs", "3. 如果要移除快捷键,请选择「无」`n" line) + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 - singleHotKeyList := [{ - tip: "中文状态", - config: "single_hotkey_CN", - }, { - tip: "英文状态", - config: "single_hotkey_EN", - }, { - tip: "大写锁定", - config: "single_hotkey_Caps", - }] - for v in singleHotKeyList { - hotkeyGui.AddText("xs", "强制切换到") - hotkeyGui.AddText("yp cRed", v.tip) - hotkeyGui.AddText("yp", ":") - gc.%v.config% := hotkeyGui.AddDropDownList("yp v" v.config, ["无", "LShift", "RShift", "LCtrl", "RCtrl", "LAlt", "RAlt", "Esc"]) - gc.%v.config%.OnEvent("Change", fn_change_hotkey) - fn_change_hotkey(item, *) { - static last := "" - if (last = item.Value) { - return - } - last := item.Value + g.AddText("xs", "3. 如果要移除快捷键,请选择「无」`n" line) + keyConfigList := [{ + config: "hotkey_CN", + tip: "中文状态", + with: "win_CN", + }, { + config: "hotkey_EN", + tip: "英文状态", + with: "win_EN", + }, { + config: "hotkey_Caps", + tip: "大写锁定", + with: "win_Caps", + }] + for v in keyConfigList { + g.AddText("xs", "强制切换到") + g.AddText("yp cRed", v.tip) + g.AddText("yp", ":") + _ := gc.%v.config% := g.AddDropDownList("yp", ["无", "LShift", "RShift", "LCtrl", "RCtrl", "LAlt", "RAlt", "Esc"]) + _._config := v.config + _._with := v.with + _.OnEvent("Change", e_change_hotkey) + e_change_hotkey(item, *) { + static last := "" + if (last = item.value) { + return + } + last := item.value - ; 同步修改到「设置组合快捷键」和「手动输入快捷键」 - if (item.Text = "无") { - key := "" - } else { - key := "~" item.Text " Up" + ; 同步修改到「设置组合快捷键」和「手动输入快捷键」 + if (item.Text = "无") { + key := "" + } else { + key := "~" item.Text " Up" + } + gc.%item._config "2"%.Value := "" + gc.%item._config "3"%.Value := key + gc.%item._with%.Value := 0 } - type := SubStr(item.Name, 15) - gc.%"hotkey_" type%.Value := "" - gc.%"hotkey_" type "2"%.Value := key - gc.%"win_" type%.Value := 0 - } - config := readIni(StrReplace(v.config, "single_", " "), "") + config := readIni(v.config, "") - if (config ~= "^~\w+\sUp$") { - try { - gc.%v.config%.Text := Trim(StrReplace(StrReplace(config, "~", ""), "Up", "")) - if (!gc.%v.config%.Value) { - gc.%v.config%.Value := 1 + if (config ~= "^~\w+\sUp$") { + try { + _.Text := Trim(StrReplace(StrReplace(config, "~", ""), "Up", "")) + if (!_.Value) { + _.Value := 1 + } + } catch { + _.Text := "无" } - } catch { - gc.%v.config%.Text := "无" - } - } else { - gc.%v.config%.Text := "无" - } - } - hotkeyGui.AddButton("xs w" bw, "确定").OnEvent("Click", confirm) - confirm(*) { - for v in singleHotKeyList { - value := hotkeyGui.Submit().%v.config% - if (value = "无") { - key := "" } else { - key := "~" value " Up" + _.Text := "无" } - writeIni(StrReplace(v.config, "single_", " "), key) } - fn_restart() - } - tab.UseTab(2) - hotkeyGui.AddText("Section", "1. 直接按下快捷键即可设置,除非快捷键被占用,需要使用「手动输入快捷键」") - hotkeyGui.AddText("xs", "2. 使用 Backspace(退格键) 或 Delete(删除键) 可以清除快捷键") - hotkeyGui.AddText("xs", "3. 通过勾选右边的 Win 键来表示快捷键中需要加入 Win 修饰键`n" line) + tab.UseTab(2) + g.AddText("Section", "1.") + g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") + g.AddText("xs", "2. 直接按下快捷键即可设置,除非快捷键被占用,需要使用「手动输入快捷键」") + g.AddText("xs", "3. 使用 Backspace(退格键) 或 Delete(删除键) 可以清除快捷键") + g.AddText("xs", "4. 通过勾选右边的 Win 键来表示快捷键中需要加入 Win 修饰键`n" line) - configList := [{ - config: "hotkey_CN", - options: "", - tip: "中文状态", - with: "win_CN", - }, { - config: "hotkey_EN", - options: "", - tip: "英文状态", - with: "win_EN", - }, { - config: "hotkey_Caps", - options: "", - tip: "大写锁定", - with: "win_Caps", - }] - - for v in configList { - hotkeyGui.AddText("xs", "强制切换到") - hotkeyGui.AddText("yp cRed", v.tip) - hotkeyGui.AddText("yp", ":") - value := readIni(v.config, '') - gc.%v.config% := hotkeyGui.AddHotkey("yp v" v.config, StrReplace(value, "#", "")) - - gc.%v.config%.OnEvent("Change", fn_change_hotkey1) - fn_change_hotkey1(item, *) { - ; 同步修改到「设置单键」和「手动输入快捷键」 - gc.%"single_" item.Name%.Text := "无" - v := item.Value - if (gc.%"win_" SubStr(item.Name, 8)%.Value) { - v := "#" v + for v in keyConfigList { + g.AddText("xs", "强制切换到") + g.AddText("yp cRed", v.tip) + g.AddText("yp", ":") + value := readIni(v.config, '') + _ := gc.%v.config "2"% := g.AddHotkey("yp", StrReplace(value, "#", "")) + _._config := v.config + _._with := v.with + _.OnEvent("Change", e_change_hotkey1) + e_change_hotkey1(item, *) { + ; 同步修改到「设置单键」和「手动输入快捷键」 + gc.%item._config%.Text := "无" + v := item.value + if (gc.%item._with%.Value) { + v := "#" v + } + gc.%item._config "3"%.Value := v } - gc.%item.Name "2"%.Value := v - } - gc.%v.with% := hotkeyGui.AddCheckbox("yp v" v.with, "Win 键") - gc.%v.with%.OnEvent("Click", fn_win_key) - fn_win_key(item, *) { - ; 同步修改到「设置单键」和「手动输入快捷键」 - type := SubStr(item.Name, 5) - gc.%"single_hotkey_" type%.Text := "无" - - v := gc.%"hotkey_" type%.Value - if (item.Value) { - gc.%"hotkey_" type "2"%.Value := "#" v - } else { - gc.%"hotkey_" type "2"%.Value := v + gc.%v.with% := g.AddCheckbox("yp", "Win 键") + gc.%v.with%._config := v.config + gc.%v.with%.OnEvent("Click", e_win_key) + e_win_key(item, *) { + ; 同步修改到「设置单键」和「手动输入快捷键」 + gc.%item._config%.Text := "无" + v := gc.%item._config "2"%.Value + gc.%item._config "3"%.Value := item.value ? "#" v : v } + gc.%v.with%.Value := InStr(value, "#") ? 1 : 0 } - gc.%v.with%.Value := InStr(value, "#") ? 1 : 0 - } - hotkeyGui.AddButton("xs w" bw, "确定").OnEvent("Click", yes) - yes(*) { - for v in configList { - if (hotkeyGui.Submit().%v.with%) { - key := "#" hotkeyGui.Submit().%v.config% - } else { - key := hotkeyGui.Submit().%v.config% + tab.UseTab(3) + g.AddText("Section", "1.") + g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") + g.AddText("xs", "2.") + g.AddText("yp cRed", "优先使用「设置单键」或「设置组合快捷键」设置,除非因为快捷键占用无法设置") + g.AddLink("xs", '3. 你需要首先查看 如何手动输入快捷键') + g.AddText("xs", '4. 建议先使用「设置单键」或「设置组合快捷键」,然后回到此处适当修改`n' line) + for v in keyConfigList { + g.AddText("xs", "强制切换到") + g.AddText("yp cRed", v.tip) + g.AddText("yp", ":") + _ := gc.%v.config "3"% := g.AddEdit("yp") + _._config := v.config + _._with := v.with + _.Value := readIni(v.config, '') + _.OnEvent("Change", e_change_hotkey2) + e_change_hotkey2(item, *) { + gc.%item._with%.Value := InStr(item.value, "#") ? 1 : 0 + ; 当输入的快捷键符合单键时,同步修改 + if (item.value ~= "^~\w+\sUp$") { + try { + gc.%item._config%.Text := Trim(StrReplace(StrReplace(item.value, "~", ""), "Up", "")) + } catch { + gc.%item._config%.Text := "无" + } + gc.%item._config "2"%.Value := "" + } else { + gc.%item._config%.Text := "无" + ; 当输入的快捷键符合组合快捷键时,同步修改 + try { + gc.%item._config "2"%.Value := StrReplace(item.value, "#", "") + } catch { + gc.%item._config "2"%.Value := "" + } + } } - writeIni(v.config, key) } - fn_restart() - } - tab.UseTab(3) - hotkeyGui.AddLink("Section", "1.") - hotkeyGui.AddLink("yp cRed", "优先使用「设置单键」或「设置组合快捷键」设置,除非因为快捷键占用无法设置") - hotkeyGui.AddLink("xs", '2. 你需要首先查看 如何手动输入快捷键') - hotkeyGui.AddLink("xs", '3. 建议先使用「设置单键」或「设置组合快捷键」,然后回到此处适当修改`n' line) - for v in configList { - hotkeyGui.AddText("xs", "强制切换到") - hotkeyGui.AddText("yp cRed", v.tip) - hotkeyGui.AddText("yp", ":") - gc.%v.config "2"% := hotkeyGui.AddEdit("yp v" v.config "2") - gc.%v.config "2"%.Value := readIni(v.config, '') - gc.%v.config "2"%.OnEvent("Change", fn_change_hotkey2) - fn_change_hotkey2(item, *) { - type := StrReplace(SubStr(item.Name, 8), "2", "") - gc.%"win_" type%.Value := InStr(item.Value, "#") ? 1 : 0 - - ; 当输入的快捷键符合单键时,同步修改 - if (item.Value ~= "^~\w+\sUp$") { - try { - gc.%"single_hotkey_" type%.Text := Trim(StrReplace(StrReplace(item.Value, "~", ""), "Up", "")) - } catch { - gc.%"single_hotkey_" type%.Text := "无" - } - gc.%"hotkey_" type%.Value := "" - } else { - gc.%"single_hotkey_" type%.Text := "无" - ; 当输入的快捷键符合组合快捷键时,同步修改 - try { - gc.%"hotkey_" type%.Value := StrReplace(item.Value, "#", "") - } catch { - gc.%"hotkey_" type%.Value := "" - } + tab.UseTab(0) + g.AddButton("Section w" w, "确定").OnEvent("Click", e_yes) + e_yes(*) { + for v in keyConfigList { + key := gc.%v.config "3"%.Value + writeIni(v.config, key) } + fn_restart() } - } - hotkeyGui.AddButton("xs w" bw, "确定").OnEvent("Click", yes2) - yes2(*) { - for v in configList { - key := hotkeyGui.Submit().%v.config "2"% - writeIni(v.config, key) + g.OnEvent("Close", e_close) + e_close(*) { + g.Destroy() } - fn_restart() - } - - hotkeyGui.OnEvent("Close", fn_close) - fn_close(*) { - hotkeyGui.Destroy() + gc.w.switchKeyGui := g + return g } - gc.w.switchKeyGui := hotkeyGui - hotkeyGui.Show() } diff --git a/src/v2/menu/switch-window.ahk b/src/v2/menu/switch-window.ahk index 26a9894..de9c61d 100644 --- a/src/v2/menu/switch-window.ahk +++ b/src/v2/menu/switch-window.ahk @@ -1,29 +1,34 @@ fn_switch_window(*) { showGui() showGui(deep := "") { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.windowToggleGui) { - gc.w.windowToggleGui.Destroy() - gc.w.windowToggleGui := "" + if (gc.w.windowToggleGui) { + gc.w.windowToggleGui.Destroy() + gc.w.windowToggleGui := "" + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + } + createGui(switchWindowGui).Show() + switchWindowGui(info) { + g := createGuiOpt() + tab := g.AddTab3("-Wrap", ["设置状态自动切换", "关于"]) + tab.UseTab(1) + g.AddText("Section cRed", "你首先应该点击上方的「关于」查看具体的操作说明 ") - try { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } + if (info.i) { + return g } - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") + w := info.w bw := w - g.MarginX * 2 - tab := g.AddTab3("-Wrap", ["设置状态自动切换", "关于"]) - tab.UseTab(1) - g.AddLink("Section cRed", "你首先应该点击上方的「关于」查看具体的操作说明 ") gc.LV_add := g.AddListView("-LV0x10 -Multi r7 NoSortHdr Sort Grid w" bw, ["应用进程列表", "窗口标题", "应用进程文件所在位置"]) - gc.LV_add.OnEvent("DoubleClick", fn_add) - fn_add(LV, RowNumber) { - handleClick(LV, RowNumber, "add") + fn_dbClick(LV, RowNumber) { + handleClick(LV, RowNumber, LV._type) } + gc.LV_add.OnEvent("DoubleClick", fn_dbClick) + gc.LV_add._type := "add" + res := [] for v in ["app_CN", "app_EN", "app_Caps"] { res.Push(readIni(v, "")) @@ -72,64 +77,64 @@ fn_switch_window(*) { gc.EN_title := g.AddText("yp w" bw / 3, "英文状态") gc.Caps_title := g.AddText("yp w" bw / 3, "大写锁定") - if (CN_color) { - c := "c" StrReplace(CN_color, "#") + if (symbolType = 3) { + c := textSymbol_CN_color ? "c" StrReplace(textSymbol_CN_color, "#") : "" } else { - c := "" + c := CN_color ? "c" StrReplace(CN_color, "#") : "" } try { - gc.LV_CN := g.AddListView("xs -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["自动切换中文"]) + gc.LV_CN := g.AddListView("xs -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["中文状态"]) } catch { - gc.LV_CN := g.AddListView("xs -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3, ["自动切换中文"]) + gc.LV_CN := g.AddListView("xs -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3, ["中文状态"]) } addItem("CN") gc.LV_CN.ModifyCol(1, "AutoHdr") - gc.LV_CN.OnEvent("DoubleClick", fn_CN) - fn_CN(LV, RowNumber) { - handleClick(LV, RowNumber, "CN") - } - if (EN_color) { - c := "c" StrReplace(EN_color, "#") + gc.LV_CN.OnEvent("DoubleClick", fn_dbClick) + gc.LV_CN._type := "CN" + + if (symbolType = 3) { + c := textSymbol_EN_color ? "c" StrReplace(textSymbol_EN_color, "#") : "" } else { - c := "" + c := EN_color ? "c" StrReplace(EN_color, "#") : "" } try { - gc.LV_EN := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["自动切换英文"]) + gc.LV_EN := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["英文状态"]) } catch { - gc.LV_EN := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3, ["自动切换英文"]) + gc.LV_EN := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3, ["英文状态"]) } addItem("EN") gc.LV_EN.ModifyCol(1, "AutoHdr") - gc.LV_EN.OnEvent("DoubleClick", fn_EN) - fn_EN(LV, RowNumber) { - handleClick(LV, RowNumber, "EN") - } - if (Caps_color) { - c := "c" StrReplace(Caps_color, "#") + gc.LV_EN.OnEvent("DoubleClick", fn_dbClick) + gc.LV_EN._type := "EN" + + if (symbolType = 3) { + c := textSymbol_Caps_color ? "c" StrReplace(textSymbol_Caps_color, "#") : "" } else { - c := "" + c := Caps_color ? "c" StrReplace(Caps_color, "#") : "" } try { - gc.LV_Caps := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["自动切换大写锁定"]) + gc.LV_Caps := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["大写锁定"]) } catch { - gc.LV_Caps := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3, ["自动切换大写锁定"]) + gc.LV_Caps := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3, ["大写锁定"]) } addItem("Caps") gc.LV_Caps.ModifyCol(1, "AutoHdr") - gc.LV_Caps.OnEvent("DoubleClick", fn_Caps) - fn_Caps(LV, RowNumber) { - handleClick(LV, RowNumber, "Caps") - } + gc.LV_Caps.OnEvent("DoubleClick", fn_dbClick) + gc.LV_Caps._type := "Caps" handleClick(LV, RowNumber, from) { if (!RowNumber) { return } - RowText := LV.GetText(RowNumber) ; 从行的第一个字段中获取文本. - createGui(fn).Show() - fn(x, y, w, h) { + exe_name := LV.GetText(RowNumber) + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { _handle(to) { - g_1.Destroy() + g.Destroy() gc.%"LV_" from%.Delete(RowNumber) if (from != "add") { gc.%from "_title"%.Value := SubStr(gc.%from "_title"%.Value, 1, 4) " ( " gc.%"LV_" from%.GetCount() " 个 )" @@ -137,7 +142,7 @@ fn_switch_window(*) { value := readIni(config, "") res := "" for v in StrSplit(value, ":") { - if (Trim(v) && v != RowText) { + if (Trim(v) && v != exe_name) { res .= ":" v } } @@ -146,36 +151,35 @@ fn_switch_window(*) { config := "app_" to value := readIni(config, "") - if (!InStr(":" value ":", ":" RowText ":")) { - gc.%"LV_" to%.Add(, RowText) + if (!InStr(":" value ":", ":" exe_name ":")) { + gc.%"LV_" to%.Add(, exe_name) gc.%to "_title"%.Value := SubStr(gc.%to "_title"%.Value, 1, 4) " ( " gc.%"LV_" to%.GetCount() " 个 )" if (value) { - writeIni(config, value ":" RowText) + writeIni(config, value ":" exe_name) } else { - writeIni(config, RowText) + writeIni(config, exe_name) } } - updateWhiteList(RowText) + updateWhiteList(exe_name) global app_CN := ":" readIni('app_CN', '') ":" global app_EN := ":" readIni('app_EN', '') ":" global app_Caps := ":" readIni('app_Caps', '') ":" } - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + g := createGuiOpt() + g.AddText(, "要将进程") + g.AddText("yp cRed", exe_name) + g.AddText("yp", "添加到哪一个自动切换列表中?") + if (useWhiteList) { + g.AddText("xs cRed", "如果此应用不在白名单中,则会同步添加到白名单中") } - g_1 := Gui("AlwaysOnTop") - g_1.SetFont(fz, "微软雅黑") - bw := w - g_1.MarginX * 2 - - g_1.AddLink(, "要将进程") - g_1.AddLink("yp cRed", RowText) - g_1.AddLink("yp", "添加到哪一个自动切换列表中?") - if (useWhiteList) { - g_1.AddLink("xs cRed", "如果此应用不在白名单中,则会同步添加到白名单中") + if (info.i) { + return g } + w := info.w + bw := w - g.MarginX * 2 + fn_CN(*) { _handle("CN") } @@ -189,44 +193,44 @@ fn_switch_window(*) { switch from { case "add": { - g_1.AddButton("xs w" bw, "「自动切换中文」").OnEvent("Click", fn_CN) - g_1.AddButton("xs w" bw, "「自动切换英文」").OnEvent("Click", fn_EN) - g_1.AddButton("xs w" bw, "「自动切换大写锁定」").OnEvent("Click", fn_Caps) + g.AddButton("xs w" bw, "「中文状态」").OnEvent("Click", fn_CN) + g.AddButton("xs w" bw, "「英文状态」").OnEvent("Click", fn_EN) + g.AddButton("xs w" bw, "「大写锁定」").OnEvent("Click", fn_Caps) } case "CN": { - g_1.AddButton("xs Disabled w" bw, "「自动切换中文」").OnEvent("Click", fn_CN) - g_1.AddButton("xs w" bw, "「自动切换英文」").OnEvent("Click", fn_EN) - g_1.AddButton("xs w" bw, "「自动切换大写锁定」").OnEvent("Click", fn_Caps) - g_1.AddButton("xs w" bw, "将它移除").OnEvent("Click", fn_rm) + g.AddButton("xs Disabled w" bw, "「中文状态」").OnEvent("Click", fn_CN) + g.AddButton("xs w" bw, "「英文状态」").OnEvent("Click", fn_EN) + g.AddButton("xs w" bw, "「大写锁定」").OnEvent("Click", fn_Caps) + g.AddButton("xs w" bw, "将它移除").OnEvent("Click", fn_rm) } case "EN": { - g_1.AddButton("xs w" bw, "「自动切换中文」").OnEvent("Click", fn_CN) - g_1.AddButton("xs Disabled w" bw, "「自动切换英文」").OnEvent("Click", fn_EN) - g_1.AddButton("xs w" bw, "「自动切换大写锁定」").OnEvent("Click", fn_Caps) - g_1.AddButton("xs w" bw, "将它移除").OnEvent("Click", fn_rm) + g.AddButton("xs w" bw, "「中文状态」").OnEvent("Click", fn_CN) + g.AddButton("xs Disabled w" bw, "「英文状态」").OnEvent("Click", fn_EN) + g.AddButton("xs w" bw, "「大写锁定」").OnEvent("Click", fn_Caps) + g.AddButton("xs w" bw, "将它移除").OnEvent("Click", fn_rm) } case "Caps": { - g_1.AddButton("xs w" bw, "「自动切换中文」").OnEvent("Click", fn_CN) - g_1.AddButton("xs w" bw, "「自动切换英文」").OnEvent("Click", fn_EN) - g_1.AddButton("xs Disabled w" bw, "「自动切换大写锁定」").OnEvent("Click", fn_Caps) - g_1.AddButton("xs w" bw, "将它移除").OnEvent("Click", fn_rm) + g.AddButton("xs w" bw, "「中文状态」").OnEvent("Click", fn_CN) + g.AddButton("xs w" bw, "「英文状态」").OnEvent("Click", fn_EN) + g.AddButton("xs Disabled w" bw, "「大写锁定」").OnEvent("Click", fn_Caps) + g.AddButton("xs w" bw, "将它移除").OnEvent("Click", fn_rm) } } fn_rm(*) { - g_1.Destroy() + g.Destroy() LV.Delete(RowNumber) gc.%from "_title"%.Value := SubStr(gc.%from "_title"%.Value, 1, 4) " ( " gc.%"LV_" from%.GetCount() " 个 )" try { - gc.LV_add.Add(, RowText, WinGetTitle("ahk_exe " RowText)) + gc.LV_add.Add(, exe_name, WinGetTitle("ahk_exe " exe_name)) } config := "app_" from value := readIni(config, "") result := "" for v in StrSplit(value, ":") { - if (Trim(v) && v != RowText) { + if (Trim(v) && v != exe_name) { result .= ":" v } } @@ -236,48 +240,51 @@ fn_switch_window(*) { global app_EN := ":" readIni('app_EN', '') ":" global app_Caps := ":" readIni('app_Caps', '') ":" } - g_1.AddButton("xs w" bw, "取消操作").OnEvent("Click", no) + g.AddButton("xs w" bw, "取消操作").OnEvent("Click", no) no(*) { - g_1.Destroy() + g.Destroy() } - gc.w.subGui := g_1 - return g_1 + gc.w.subGui := g + return g } } - g.AddButton("xs w" bw / 3, "刷新应用进程列表").OnEvent("Click", fn_refresh) - fn_refresh(*) { + g.AddButton("xs w" bw / 3, "刷新应用进程列表").OnEvent("Click", e_refresh) + e_refresh(*) { fn_close() showGui(deep) } - g.AddButton("yp w" bw / 3, "通过输入进程名称手动添加").OnEvent("Click", fn_add_by_hand) - fn_add_by_hand(*) { + g.AddButton("yp w" bw / 3, "通过输入进程名称手动添加").OnEvent("Click", e_add_by_hand) + e_add_by_hand(*) { addApp("xxx.exe") addApp(v) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { + g := createGuiOpt("InputTip - 设置状态自动切换") + text := "每次只能添加一个应用进程名称" + if (useWhiteList) { + text .= "`n如果它不在白名单中,则会同步添加到白名单中" } - g_2 := Gui("AlwaysOnTop", "InputTip - 通过输入进程名称手动添加") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 + g.AddText("cRed", text) + g.AddText("xs", "应用进程名称: ") + gc._exe_name := g.AddEdit("yp") + gc._exe_name.Value := v + g.AddText("xs cGray", "你想要将它添加到哪个自动切换列表中?") - if (useWhiteList) { - g_2.AddText("cRed", "如果此应用不在白名单中,则会同步添加到白名单中") + if (info.i) { + return g } - g_2.AddText(, "1. 进程名称应该是") - g_2.AddText("yp cRed", "xxx.exe") - g_2.AddText("yp", "这样的格式") - g_2.AddText("xs", "2. 每一次只能添加一个") - g_2.AddText("xs", "应用进程名称: ") - g_2.AddEdit("yp vexe_name", "").Value := v + w := info.w + bw := w - g.MarginX * 2 - g_2.AddButton("xs w" bw, "添加到「自动切换中文」").OnEvent("Click", fn_CN) - g_2.AddButton("xs w" bw, "添加到「自动切换英文」").OnEvent("Click", fn_EN) - g_2.AddButton("xs w" bw, "添加到「自动切换大写锁定」").OnEvent("Click", fn_Caps) + g.AddButton("xs w" bw, "「中文状态」").OnEvent("Click", fn_CN) + g.AddButton("xs w" bw, "「英文状态」").OnEvent("Click", fn_EN) + g.AddButton("xs w" bw, "「大写锁定」").OnEvent("Click", fn_Caps) fn_CN(*) { _handle("CN") } @@ -289,22 +296,35 @@ fn_switch_window(*) { } _handle(to) { - exe_name := g_2.Submit().exe_name - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || InStr(exe_name, ":")) { - createGui(fn).Show() - fn(x, y, w, h) { - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText(, "进程名称不符合格式要求,请重新输入") - y := g_2.AddButton("w" bw, "我知道了") - y.OnEvent("click", close) + exe_name := gc._exe_name.value + g.Destroy() + if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "是一个错误的应用进程名称") + g.AddText("xs cRed", '正确的应用进程名称是 xxx.exe 这样的格式`n同时文件名中不能包含这些英文符号 \ / : * ? " < >|') + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + y := g.AddButton("xs w" bw, "重新输入") y.Focus() - close(*) { - g_2.Destroy() + y.OnEvent("click", e_close) + e_close(*) { + g.Destroy() addApp(exe_name) } - return g_2 + gc.w.subGui := g + return g } return } @@ -313,19 +333,29 @@ fn_switch_window(*) { value := readIni(config, "") if (InStr(":" value ":", ":" exe_name ":")) { - createGui(fn1).Show() - fn1(x, y, w, h) { - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText("cRed", exe_name) - g_2.AddText("yp", "已经存在,请重新输入") - g_2.AddButton("xs w" bw, "重新输入").OnEvent("click", close) - close(*) { - g_2.Destroy() + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(existGui).Show() + existGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "这个应用进程已经存在了") + + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("xs w" bw, "重新输入").OnEvent("click", e_close) + e_close(*) { + g.Destroy() addApp(exe_name) } - return g_2 + gc.w.subGui := g + return g } return } @@ -341,20 +371,20 @@ fn_switch_window(*) { global app_EN := ":" readIni('app_EN', '') ":" global app_Caps := ":" readIni('app_Caps', '') ":" } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } } } if (deep) { - g.AddButton("yp w" bw / 3, "显示更少进程(仅前台窗口)").OnEvent("Click", fn_less_window) - fn_less_window(*) { + g.AddButton("yp w" bw / 3, "显示更少进程(仅前台窗口)").OnEvent("Click", e_less_window) + e_less_window(*) { fn_close() showGui("") } } else { - g.AddButton("yp w" bw / 3, "显示更多进程(后台窗口)").OnEvent("Click", fn_more_window) - fn_more_window(*) { + g.AddButton("yp w" bw / 3, "显示更多进程(后台窗口)").OnEvent("Click", e_more_window) + e_more_window(*) { fn_close() showGui(1) } @@ -368,6 +398,10 @@ fn_switch_window(*) { g.OnEvent("Close", fn_close) fn_close(*) { g.Destroy() + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } } gc.w.windowToggleGui := g return g diff --git a/src/v2/menu/tray-menu.ahk b/src/v2/menu/tray-menu.ahk index 48edd55..1f3690e 100644 --- a/src/v2/menu/tray-menu.ahk +++ b/src/v2/menu/tray-menu.ahk @@ -32,6 +32,7 @@ makeTrayMenu() { A_TrayMenu.Add() A_TrayMenu.Add("更改配置", fn_config) + A_TrayMenu.Add() A_TrayMenu.Add("设置特殊偏移量", fn_app_offset) A_TrayMenu.Add("设置状态切换快捷键", fn_switch_key) A_TrayMenu.Add("指定窗口自动切换状态", fn_switch_window) @@ -64,29 +65,33 @@ fn_restart(flag := 0, *) { fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { showGui() showGui(deep := "") { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.%tipList.gui%) { - gc.w.%tipList.gui%.Destroy() - gc.w.%tipList.gui% := "" - try { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } + if (gc.w.%tipList.gui%) { + gc.w.%tipList.gui%.Destroy() + gc.w.%tipList.gui% := "" + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" } - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") - - _gui := tipList.gui + } + createGui(commonGui).Show() + commonGui(info) { + g := createGuiOpt() tab := g.AddTab3("-Wrap", tipList.tab) tab.UseTab(1) g.AddLink("Section cRed", tipList.tip) + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + tabs := ["应用进程列表", "窗口标题", "应用进程文件所在位置"] + _gui := tipList.gui - gc.%_gui "_LV_add"% := g.AddListView("-LV0x10 -Multi r7 NoSortHdr Sort Grid w" w, tabs) - gc.%_gui "_LV_add"%.OnEvent("DoubleClick", fn_double_click) - fn_double_click(LV, RowNumber) { + LV_add := gc.%_gui "_LV_add"% := g.AddListView("-LV0x10 -Multi r7 NoSortHdr Sort Grid w" w, tabs) + LV_add.OnEvent("DoubleClick", e_add_dbClick) + e_add_dbClick(LV, RowNumber) { if (addClickFn) { addClickFn(LV, RowNumber, tipList) } else { @@ -103,14 +108,14 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { } temp := ":" DetectHiddenWindows deep - gc.%_gui "_LV_add"%.Opt("-Redraw") + LV_add.Opt("-Redraw") for v in WinGetList() { try { exe_name := ProcessGetName(WinGetPID("ahk_id " v)) exe_str := ":" exe_name ":" if (!InStr(temp, exe_str) && !InStr(res, exe_str)) { temp .= exe_name ":" - gc.%_gui "_LV_add"%.Add(, exe_name, WinGetTitle("ahk_id " v), WinGetProcessPath("ahk_id " v)) + LV_add.Add(, exe_name, WinGetTitle("ahk_id " v), WinGetProcessPath("ahk_id " v)) } } } @@ -119,37 +124,37 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { if (!InStr(temp, ":" v ":") && !InStr(res, ":" v ":")) { temp .= v ":" try { - gc.%_gui "_LV_add"%.Add(, v, WinGetTitle("ahk_exe " v), WinGetProcessPath("ahk_exe " v)) + LV_add.Add(, v, WinGetTitle("ahk_exe " v), WinGetProcessPath("ahk_exe " v)) } catch { - gc.%_gui "_LV_add"%.Add(, v) + LV_add.Add(, v) } } } } - gc.%_gui "_LV_add"%.Opt("+Redraw") + LV_add.Opt("+Redraw") DetectHiddenWindows 1 gc.%_gui "_LV_rm_title"% := g.AddText("w" w, tipList.list) - gc.%_gui "_LV_rm"% := g.AddListView("xs -Hdr -LV0x10 -Multi r8 NoSortHdr Sort Grid w" w / 2 " " tipList.color, [tipList.list]) + LV_rm := gc.%_gui "_LV_rm"% := g.AddListView("xs -Hdr -LV0x10 -Multi r8 NoSortHdr Sort Grid w" w / 2 " " tipList.color, [tipList.list]) valueArr := StrSplit(readIni(tipList.config, ""), ":") temp := ":" - gc.%_gui "_LV_rm"%.Opt("-Redraw") + LV_rm.Opt("-Redraw") for v in valueArr { if (Trim(v) && !InStr(temp, ":" v ":")) { if (tipList.config = "app_offset") { - gc.%_gui "_LV_rm"%.Add(, StrSplit(v, "|")[1]) + LV_rm.Add(, StrSplit(v, "|")[1]) } else { - gc.%_gui "_LV_rm"%.Add(, v) + LV_rm.Add(, v) } temp .= v ":" } } - gc.%_gui "_LV_rm"%.Opt("+Redraw") - gc.%_gui "_LV_rm_title"%.Text := tipList.list " ( " gc.%_gui "_LV_rm"%.GetCount() " 个 )" - gc.%_gui "_LV_rm"%.ModifyCol(1, "AutoHdr") - gc.%_gui "_LV_rm"%.OnEvent("DoubleClick", fn_dbClick) - fn_dbClick(LV, RowNumber) { + LV_rm.Opt("+Redraw") + gc.%_gui "_LV_rm_title"%.Text := tipList.list " ( " LV_rm.GetCount() " 个 )" + LV_rm.ModifyCol(1, "AutoHdr") + LV_rm.OnEvent("DoubleClick", e_rm_dbClick) + e_rm_dbClick(LV, RowNumber) { if (rmClickFn) { rmClickFn(LV, RowNumber, tipList) } else { @@ -160,190 +165,179 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { if (!RowNumber) { return } - RowText := LV.GetText(RowNumber) ; 从行的第一个字段中获取文本. - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + exe_name := LV.GetText(RowNumber) + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { + g := createGuiOpt() + g.AddLink(, tipList.%from "Confirm"%) + g.AddLink("yp cRed", exe_name) + g.AddLink("yp", tipList.%from "Confirm2"%) + g.AddLink("xs", tipList.%from "Confirm3"%) + if (info.i) { + return g } - g_1 := Gui("AlwaysOnTop") - g_1.SetFont(fz, "微软雅黑") - bw := w - g_1.MarginX * 2 - - g_1.AddLink(, tipList.%from "Confirm"%) - g_1.AddLink("yp cRed", RowText) - g_1.AddLink("yp", tipList.%from "Confirm2"%) - g_1.AddLink("xs", tipList.%from "Confirm3"%) - + w := info.w + bw := w - g.MarginX * 2 if (from = "add") { - ; 需要同步添加到白名单 - if (useWhiteList && tipList.addConfirm4) { - g_1.AddLink("xs cRed", tipList.addConfirm4) - } - if (useWhiteList) { - _g := g_1.AddButton("xs w" bw, "添加") - _g.OnEvent("Click", fn_add_with_white_list) - _g.Focus() - fn_add_with_white_list(*) { - if (tipList.config != "app_show_state") { - updateWhiteList(RowText) - } - g_1.Destroy() - gc.%_gui "_LV_add"%.Delete(RowNumber) - gc.%_gui "_LV_rm"%.Add(, RowText) - config := tipList.config - value := readIni(config, "") - if (value) { - result := value ":" RowText - writeIni(config, value ":" RowText) - } else { - result := RowText - writeIni(config, RowText) - } - handleFn(result) - } - } else { - _g := g_1.AddButton("xs w" bw, "添加") - _g.OnEvent("Click", fn_add) - _g.Focus() - fn_add(*) { - g_1.Destroy() - gc.%_gui "_LV_add"%.Delete(RowNumber) - gc.%_gui "_LV_rm"%.Add(, RowText) - config := tipList.config - value := readIni(config, "") - if (value) { - result := value ":" RowText - writeIni(config, value ":" RowText) - } else { - result := RowText - writeIni(config, RowText) - } - handleFn(result) + _ := g.AddButton("xs w" bw, "添加") + _.Focus() + _.OnEvent("Click", fn_add) + fn_add(*) { + g.Destroy() + gc.%_gui "_LV_add"%.Delete(RowNumber) + gc.%_gui "_LV_rm"%.Add(, exe_name) + config := tipList.config + value := readIni(config, "") + if (value) { + result := value ":" exe_name + writeIni(config, value ":" exe_name) + } else { + result := exe_name + writeIni(config, exe_name) } + handleFn(result) } } else { - _g := g_1.AddButton("xs w" bw, "移除") - _g.OnEvent("Click", fn_rm) - _g.Focus() - } - fn_rm(*) { - g_1.Destroy() - LV.Delete(RowNumber) - gc.%_gui "_LV_rm_title"%.Text := tipList.list " ( " gc.%_gui "_LV_rm"%.GetCount() " 个 )" - try { - gc.%_gui "_LV_add"%.Add(, RowText, WinGetTitle("ahk_exe " RowText)) - } - config := tipList.config - value := readIni(config, "") - result := "" - for v in StrSplit(value, ":") { - if (Trim(v) && v != RowText) { - result .= ":" v + _ := g.AddButton("xs w" bw, "移除") + _.Focus() + _.OnEvent("Click", e_rm) + e_rm(*) { + g.Destroy() + LV.Delete(RowNumber) + gc.%_gui "_LV_rm_title"%.Text := tipList.list " ( " gc.%_gui "_LV_rm"%.GetCount() " 个 )" + try { + gc.%_gui "_LV_add"%.Add(, exe_name, WinGetTitle("ahk_exe " exe_name)) + } + config := tipList.config + value := readIni(config, "") + result := "" + for v in StrSplit(value, ":") { + if (Trim(v) && v != exe_name) { + result .= ":" v + } } + result := SubStr(result, 2) + writeIni(config, result) + handleFn(result) } - result := SubStr(result, 2) - writeIni(config, result) - handleFn(result) } - g_1.AddButton("xs w" bw, "取消").OnEvent("Click", no) + g.AddButton("xs w" bw, "取消").OnEvent("Click", no) no(*) { - g_1.Destroy() + g.Destroy() } - gc.w.subGui := g_1 - return g_1 + gc.w.subGui := g + return g } } - g.AddButton("Section yp w" w / 2, "刷新应用进程列表").OnEvent("Click", fn_refresh) - fn_refresh(*) { + g.AddButton("Section yp w" w / 2, "刷新应用进程列表").OnEvent("Click", e_refresh) + e_refresh(*) { fn_close() showGui(deep) } - g.AddButton("xs w" w / 2, "通过输入进程名称手动添加").OnEvent("Click", fn_add_by_hand) - fn_add_by_hand(*) { + g.AddButton("xs w" w / 2, "通过输入进程名称手动添加").OnEvent("Click", e_add_by_hand) + e_add_by_hand(*) { if (addFn) { addFn(tipList) return } addApp("xxx.exe") addApp(v) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(addGui).Show() + addGui(info) { + g := createGuiOpt("InputTip - " tipList.tab[1]) + text := "每次只能添加一个应用进程名称" + if (useWhiteList) { + text .= "`n如果它不在白名单中,则会同步添加到白名单中" } - g_2 := Gui("AlwaysOnTop", "InputTip - 手动添加进程") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 + g.AddText("cRed", text) + g.AddText("xs", "应用进程名称: ") - ; 需要同步添加到白名单 - if (useWhiteList && tipList.addConfirm4) { - g_2.AddText("cRed", tipList.addConfirm4) + if (info.i) { + return g } - g_2.AddText(, "1. 进程名称应该是") - g_2.AddText("yp cRed", "xxx.exe") - g_2.AddText("yp", "这样的格式") - g_2.AddText("xs", "2. 每一次只能添加一个") - g_2.AddText("xs", "应用进程名称: ") - g_2.AddEdit("yp vexe_name", "").Value := v - g_2.AddButton("xs w" bw, "添加").OnEvent("Click", yes) - yes(*) { - exe_name := g_2.Submit().exe_name - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || InStr(exe_name, ":")) { - createGui(fn).Show() - fn(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + w := info.w + bw := w - g.MarginX * 2 + + gc._exe_name := g.AddEdit("yp") + gc._exe_name.Value := v + g.AddButton("xs w" bw, "添加").OnEvent("Click", e_yes) + e_yes(*) { + exe_name := gc._exe_name.value + g.Destroy() + if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "是一个错误的应用进程名称") + g.AddText("xs cRed", '正确的应用进程名称是 xxx.exe 这样的格式`n同时文件名中不能包含这些英文符号 \ / : * ? " < >|') + + if (info.i) { + return g } - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText(, "进程名称不符合格式要求,请重新输入") - y := g_2.AddButton("w" bw, "我知道了") - y.OnEvent("click", close) + w := info.w + bw := w - g.MarginX * 2 + + y := g.AddButton("xs w" bw, "重新输入") y.Focus() - close(*) { - g_2.Destroy() + y.OnEvent("click", e_close) + e_close(*) { + g.Destroy() addApp(exe_name) } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } return } value := readIni(tipList.config, "") valueArr := StrSplit(value, ":") res := "" - is_exist := 0 + isExist := 0 for v in valueArr { if (v = exe_name) { - is_exist := 1 + isExist := 1 } if (Trim(v)) { res .= v ":" } } - if (is_exist) { - createGui(fn1).Show() - fn1(x, y, w, h) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + if (isExist) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(existGui).Show() + existGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "这个应用进程已经存在了") + + if (info.i) { + return g } - g_2 := Gui("AlwaysOnTop") - g_2.SetFont(fz, "微软雅黑") - bw := w - g_2.MarginX * 2 - g_2.AddText(, exe_name " 已经存在了,请重新输入") - g_2.AddButton("w" bw, "重新输入").OnEvent("click", close) - close(*) { - g_2.Destroy() + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("xs w" bw, "重新输入").OnEvent("click", e_close) + e_close(*) { + g.Destroy() addApp(exe_name) } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } } else { updateWhiteList(exe_name) @@ -353,32 +347,36 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { handleFn(result) } } - gc.w.subGui := g_2 - return g_2 + gc.w.subGui := g + return g } } } - g.AddButton("xs w" w / 2, "一键清空「" tipList.list "」").OnEvent("Click", fn_clear) - fn_clear(*) { - createGui(fn).Show() - fn(x, y, w, h) { - count := gc.%tipList.gui "_LV_rm"%.GetCount() - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + g.AddButton("xs w" w / 2, "一键清空「" tipList.list "」").OnEvent("Click", e_clear) + e_clear(*) { + count := gc.%tipList.gui "_LV_rm"%.GetCount() + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(clearGui).Show() + clearGui(info) { + g := createGuiOpt() + g.AddText(, "确定要清空「" tipList.list "」吗?") + g.AddText("cRed", "请谨慎选择,它会移除其中的 " count " 个应用进程`n一旦清空,无法恢复,只能重新一个一个添加") + + if (info.i) { + return g } - g_3 := Gui("AlwaysOnTop") - g_3.SetFont(fz, "微软雅黑") - bw := w - g_3.MarginX * 2 - g_3.AddText(, "确定要清空「" tipList.list "」吗?") - g_3.AddText("cRed", "请谨慎选择,它会移除其中的 " count " 个应用进程") - g_3.AddText("cRed", "一旦清空,无法恢复,只能重新一个一个添加") - g_3.AddButton("xs w" bw, "【是】我确定要清空").OnEvent("Click", yes) - _g := g_3.AddButton("xs w" bw, "【否】不,我点错了") - _g.OnEvent("Click", no) - _g.Focus() + w := info.w + bw := w - g.MarginX * 2 + + g.AddButton("xs w" bw, "【是】我确定要清空").OnEvent("Click", yes) + _ := g.AddButton("xs w" bw, "【否】不,我点错了") + _.Focus() + _.OnEvent("Click", no) yes(*) { - g_3.Destroy() + g.Destroy() gc.%_gui "_LV_rm"%.Delete() writeIni(tipList.config, "") handleFn("") @@ -386,28 +384,28 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { showGui(deep) } no(*) { - g_3.Destroy() + g.Destroy() } - gc.w.subGui := g_3 - return g_3 + gc.w.subGui := g + return g } } if (deep) { - g.AddButton("xs w" w / 2, "显示更少进程(前台窗口)").OnEvent("Click", fn_less_window) - fn_less_window(*) { + g.AddButton("xs w" w / 2, "显示更少进程(前台窗口)").OnEvent("Click", e_less_window) + e_less_window(*) { fn_close() showGui("") } } else { - g.AddButton("xs w" w / 2, "显示更多进程(后台窗口)").OnEvent("Click", fn_more_window) - fn_more_window(*) { + g.AddButton("xs w" w / 2, "显示更多进程(后台窗口)").OnEvent("Click", e_more_window) + e_more_window(*) { fn_close() showGui(1) } } - gc.%_gui "_LV_add"%.ModifyCol(1, "AutoHdr") - gc.%_gui "_LV_add"%.ModifyCol(2, "AutoHdr") - gc.%_gui "_LV_add"%.ModifyCol(3, "AutoHdr") + LV_add.ModifyCol(1, "AutoHdr") + LV_add.ModifyCol(2, "AutoHdr") + LV_add.ModifyCol(3, "AutoHdr") tab.UseTab(2) g.AddEdit("ReadOnly -VScroll w" w, tipList.about) if (tipList.link) { @@ -416,6 +414,10 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { g.OnEvent("Close", fn_close) fn_close(*) { g.Destroy() + try { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } } gc.w.%tipList.gui% := g return g @@ -432,7 +434,7 @@ fn_white_list(*) { list: "符号显示白名单", color: "cRed", about: '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 双击列表中任意应用进程,就可以将其添加到「符号显示白名单」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n - 下方是「符号显示白名单」应用进程列表,如果使用白名单机制,它将生效`n - 双击列表中任意应用进程,就可以将它移除`n`n - 白名单机制: 只有在白名单中的应用进程窗口才会显示符号`n - 建议使用白名单机制,这样可以精确控制哪些应用进程窗口需要显示符号`n - 使用白名单机制,只需要添加常用的窗口,可以减少一些特殊窗口的兼容性问题`n - 如果选择了白名单机制,请及时添加你需要使用的应用进程到白名单中`n`n2. 如何快速添加应用进程?`n - 每次双击应用进程后,会弹出操作窗口,需要选择添加/移除或取消`n - 如果你确定当前操作不需要取消,可以在操作窗口弹出后,按下空格键快速确认', - link: '相关链接: 白名单机制', + link: '相关链接: 白名单机制', addConfirm: "是否要将", addConfirm2: "添加到「符号显示白名单」中?", addConfirm3: "添加后,白名单机制下,在此应用窗口中时,会显示符号", @@ -485,8 +487,9 @@ getCursorDir() { getPicDir() { picList := ":" defaultList := ":InputTipSymbol\default\Caps.png:InputTipSymbol\default\EN.png:InputTipSymbol\default\CN.png:" + disableList := ":InputTipSymbol\default\offer.png:InputTipSymbol\default\favicon.png:InputTipSymbol\default\favicon-pause.png:" Loop Files "InputTipSymbol\*", "R" { - if (A_LoopFileExt = "png" && A_LoopFilePath != "InputTipSymbol\default\offer.png") { + if (A_LoopFileExt = "png" && !InStr(disableList, ":" A_LoopFilePath ":")) { if (!InStr(picList, ":" A_LoopFilePath ":") && !InStr(defaultList, ":" A_LoopFilePath ":")) { picList .= A_LoopFilePath ":" } diff --git a/src/v2/utils/IME.ahk b/src/v2/utils/IME.ahk index 429e4df..e3cdb02 100644 --- a/src/v2/utils/IME.ahk +++ b/src/v2/utils/IME.ahk @@ -178,7 +178,6 @@ isCN() { * switch_CN() */ switch_CN(*) { - isShift := GetKeyState("Shift", "P") if (GetKeyState("CapsLock", "T")) { SendInput("{CapsLock}") } @@ -188,7 +187,7 @@ switch_CN(*) { } } Sleep(50) - if (!isShift && !isCN()) { + if (!isCN()) { SendInput("{LShift}") Sleep(50) if (!isCN()) { @@ -205,7 +204,6 @@ switch_CN(*) { * switch_EN() */ switch_EN(*) { - isShift := GetKeyState("Shift", "P") if (GetKeyState("CapsLock", "T")) { SendInput("{CapsLock}") } @@ -215,7 +213,7 @@ switch_EN(*) { } } Sleep(50) - if (!isShift && isCN()) { + if (isCN()) { SendInput("{LShift}") Sleep(50) if (isCN()) { diff --git a/src/v2/utils/check-version.ahk b/src/v2/utils/check-version.ahk index c5df726..008c105 100644 --- a/src/v2/utils/check-version.ahk +++ b/src/v2/utils/check-version.ahk @@ -78,8 +78,13 @@ checkVersion(currentVersion, callback, urls := [ /** * 检查更新并弹出确认框 */ -checkUpdate(init := 0) { +checkUpdate(init := 0, once := false) { if (checkUpdateDelay) { + updateTitle := "InputTip - 有新版本啦,快点击更新体验新版本吧! " + if (once) { + checkUpdateTimer() + return + } if (init) { checkUpdateTimer() } @@ -89,18 +94,19 @@ checkUpdate(init := 0) { SetTimer(checkUpdateTimer, 0) return } + if (gc.init) { + return + } if (A_IsCompiled) { checkVersion(currentVersion, updateConfirm) updateConfirm(newVersion, url) { - if (WinExist("InputTip - 有新版本啦,快点击更新体验新版本吧! ")) { + if (WinExist(updateTitle)) { SetTimer(checkUpdateTimer, 0) return } - createGui(fn).Show() - fn(x, y, w, h) { - g := Gui("AlwaysOnTop", "InputTip - 有新版本啦,快点击更新体验新版本吧! ") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 + createGui(updateGui).Show() + updateGui(info) { + g := createGuiOpt(updateTitle) g.AddText(, "InputTip 有版本更新: ") g.AddText("yp cff5050", currentVersion) g.AddText("yp", ">") @@ -108,10 +114,15 @@ checkUpdate(init := 0) { g.AddText("xs", "---------------------------------------------------------") g.AddLink("xs", '版本更新日志: 官网 Github Gitee') g.AddText("cRed", "点击确认更新后,会自动下载新版本替代旧版本并重启`n") + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 y := g.AddButton("xs w" bw, "确认更新") - y.OnEvent("Click", yes) y.Focus() - yes(*) { + y.OnEvent("Click", e_yes) + e_yes(*) { g.Destroy() releases := [ "https://inputtip.pages.dev/releases/v2/InputTip.exe", @@ -143,11 +154,9 @@ checkUpdate(init := 0) { } if (!done) { - createGui(fn).Show() - fn(x, y, w, h) { - g := Gui("AlwaysOnTop") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() g.AddText("cRed", "InputTip 新版本下载错误!") g.AddText("xs cRed", "请手动下载最新版本的 InputTip.exe 文件并替换。") g.AddText(, "--------------------------------------------------") @@ -157,9 +166,14 @@ checkUpdate(init := 0) { g.AddLink("yp", 'https://github.com/abgox/InputTip') g.AddText("xs", "Gitee: :") g.AddLink("yp", 'https://gitee.com/abgox/InputTip') + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 y := g.AddButton("xs w" bw, "我知道了") - y.OnEvent("Click", yes) y.Focus() + y.OnEvent("Click", yes) g.OnEvent("Close", yes) yes(*) { g.Destroy() @@ -172,15 +186,15 @@ checkUpdate(init := 0) { } } } - g.AddButton("xs w" bw, "忽略更新").OnEvent("Click", no) - no(*) { + g.AddButton("xs w" bw, "忽略更新").OnEvent("Click", e_no) + e_no(*) { g.Destroy() global checkUpdateDelay := 0 writeIni("checkUpdateDelay", 0) showMsg(["忽略版本更新成功!", "如果你在使用过程中有任何问题,首先需要确定是否为最新版本。", "如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue", "Github 和其他相关地址可以在软件托盘菜单的 「关于」 中找到"], "我知道了") } - g.OnEvent("Close", close) - close(*) { + g.OnEvent("Close", e_close) + e_close(*) { g.Destroy() checkUpdate() } @@ -190,15 +204,13 @@ checkUpdate(init := 0) { } else { checkVersion(currentVersion, updatePrompt) updatePrompt(newVersion, url) { - if (WinExist("InputTip - 有新版本啦,快点击更新体验新版本吧! ")) { + if (WinExist(updateTitle)) { SetTimer(checkUpdateTimer, 0) return } createGui(fn).Show() - fn(x, y, w, h) { - g := Gui("AlwaysOnTop", "InputTip - 有新版本啦,快点击更新体验新版本吧! ") - g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 + fn(info) { + g := createGuiOpt(updateTitle) g.AddText(, "- 你正在通过项目源代码启动 InputTip") g.AddText("xs", "- InputTip 有版本更新:") g.AddText("yp cff5050", "v" currentVersion) @@ -210,9 +222,14 @@ checkUpdate(init := 0) { g.AddText("xs", "---------------------------------------------------------------------") g.AddLink("xs", '项目仓库地址: Github Gitee') g.AddLink("xs", '版本更新日志: 官网 Github Gitee') + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 y := g.AddButton("w" bw, "我知道了") - y.OnEvent("Click", yes) y.Focus() + y.OnEvent("Click", yes) g.OnEvent("Close", yes) yes(*) { g.Destroy() @@ -282,19 +299,19 @@ checkUpdateDone() { } try { - IniRead("InputTip.ini", "Config-v2", "charSymbol_CN_color") + IniRead("InputTip.ini", "Config-v2", "textSymbol_CN_color") } catch { - writeIni("charSymbol_CN_color", readIni("CN_color", "red")) - writeIni("charSymbol_EN_color", readIni("EN_color", "blue")) - writeIni("charSymbol_Caps_color", readIni("Caps_color", "green")) - writeIni("charSymbol_transparent", readIni('transparent', 222)) - writeIni("charSymbol_offset_x", readIni('offset_x', 10)) - writeIni("charSymbol_offset_y", readIni('offset_y', -30)) - writeIni("charSymbol_border_type", readIni('border_type', 1)) + writeIni("textSymbol_CN_color", readIni("CN_color", "red")) + writeIni("textSymbol_EN_color", readIni("EN_color", "blue")) + writeIni("textSymbol_Caps_color", readIni("Caps_color", "green")) + writeIni("textSymbol_transparent", readIni('transparent', 222)) + writeIni("textSymbol_offset_x", readIni('offset_x', 10)) + writeIni("textSymbol_offset_y", readIni('offset_y', -30)) + writeIni("textSymbol_border_type", readIni('border_type', 1)) } - createGui(fn).Show() - fn(x, y, w, h) { + createGui(doneGui).Show() + doneGui(info) { g := Gui("AlwaysOnTop", "InputTip - 版本更新完成") g.SetFont("s14", "微软雅黑") g.AddText(, "版本更新完成,当前版本: ") @@ -302,9 +319,14 @@ checkUpdateDone() { g.AddText("xs", "-------------------------------------------") g.AddText("xs", "建议查看更新日志,了解最新变化") g.AddLink("xs", '版本更新日志: 官网 Github Gitee') - y := g.AddButton("xs w" w, "我知道了") - y.OnEvent("Click", yes) + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + y := g.AddButton("xs w" bw, "我知道了") y.Focus() + y.OnEvent("Click", yes) yes(*) { g.Destroy() } diff --git a/src/v2/utils/create-gui.ahk b/src/v2/utils/create-gui.ahk new file mode 100644 index 0000000..efab335 --- /dev/null +++ b/src/v2/utils/create-gui.ahk @@ -0,0 +1,45 @@ +/** + * - 创建 Gui 对象。 + * - 能够获取窗口最终的坐标和宽高,方便配置控件(如按钮宽度)。 + * - 原理: 通过先执行一次隐藏显示来获取信息,相当于实际会运行两次 + * @param {Func} callback + * - 回调函数接受形参 `info` + * - `info.x`,`info.y`,`info.w`,`info.h`: 最终计算得到的窗口坐标和宽高。 + * - 当执行隐藏显示时,`info.i` 为 `1`,否则为 `0` + * @returns {Gui} 返回 Gui 对象 + * @example + * createGui(helloGui).Show() + * helloGui(info) { + * g := createGuiOpt() + * g.AddText(, "xxxxxxxxxxxxxxxxxxx") + * ; 第一次隐藏显示,可以通过它在合适的地方直接返回,减少多余的执行 + * if (info.i) { + * return g + * } + * w := info.w + * bw := w - g.MarginX * 2 + * ; 其他控件... + * g.AddButton("w" bw, "确定") + * return g + * } + */ +createGui(callback) { + g := callback({ x: 0, y: 0, w: 0, h: 0, i: 1 }) + g.Show("Hide") + g.GetPos(&x, &y, &w, &h) + g.Destroy() + return callback({ x: x, y: y, w: w, h: h, i: 0 }) +} + +/** + * @param title Gui 标题 + * @param {Array} fontOption 字体配置(如: ["s12", "微软雅黑"]) + * - 这里为了方便 InputTip 使用,默认值使用了外部的 fontOpt 变量 + * @param {String} guiOption Gui 初始化配置 + * @returns {Gui} 返回 Gui 对象 + */ +createGuiOpt(title := A_ScriptName, fontOption := fontOpt, guiOption := "AlwaysOnTop") { + g := Gui(guiOption, title) + g.SetFont(fontOption*) + return g +} diff --git a/src/v2/utils/options.ahk b/src/v2/utils/options.ahk index 74b90b6..7bfc508 100644 --- a/src/v2/utils/options.ahk +++ b/src/v2/utils/options.ahk @@ -1,6 +1,6 @@ #Requires AutoHotkey v2.0 ;@AHK2Exe-SetLanguage 0x0804 -;@Ahk2Exe-SetMainIcon ..\favicon.ico +;@Ahk2Exe-SetMainIcon img\favicon.ico ;@Ahk2Exe-SetCopyright Copyright (c) 2023-present abgox #SingleInstance Force #Warn All, Off diff --git a/src/v2/utils/show.ahk b/src/v2/utils/show.ahk index 400daea..21ecfe8 100644 --- a/src/v2/utils/show.ahk +++ b/src/v2/utils/show.ahk @@ -164,7 +164,7 @@ loadSymbol(state, left, top) { } else if (symbolType = 2) { showConfig .= "w" symbol_width "h" symbol_height "x" left + offset_x "y" top + offset_y } else if (symbolType = 3) { - showConfig .= "x" left + charSymbol_offset_x "y" top + charSymbol_offset_y + showConfig .= "x" left + textSymbol_offset_x "y" top + textSymbol_offset_y } if (symbolInfo.%"gui_" state%) { symbolInfo.%"gui_" state%.Show(showConfig) diff --git a/src/v2/utils/var.ahk b/src/v2/utils/var.ahk index a76a3de..28169f4 100644 --- a/src/v2/utils/var.ahk +++ b/src/v2/utils/var.ahk @@ -1,5 +1,5 @@ -; 配置菜单的字体大小 -fz := "s" readIni("gui_font_size", "12") +; g.SetFont(fontOpt*) +fontOpt := ["s" readIni("gui_font_size", "12"), "微软雅黑"] ; 输入法模式 mode := readIni("mode", 1, "InputMethod") @@ -120,6 +120,12 @@ for v in cursorInfo { } } +stateMap := { + CN: "中文状态", + EN: "英文状态", + Caps: "大写锁定" +} + updateSymbol(1) left := 0, top := 0 @@ -154,7 +160,7 @@ updateCursor(init := 0) { for key in cursor_dir.OwnProps() { Loop Files cursor_dir.%key% "\*.*" { - n := StrUpper(SubStr(A_LoopFileName, 1, StrLen(A_LoopFileName) - 4)) + n := SubStr(A_LoopFileName, 1, StrLen(A_LoopFileName) - 4) for v in cursorInfo { if (v.type = n) { v.%key% := A_LoopFileFullPath @@ -205,16 +211,16 @@ updateSymbol(init := 0) { border_type := readIni('border_type', 1) ; * 文本符号相关配置 ; 背景颜色 - charSymbol_CN_color := StrReplace(readIni("charSymbol_CN_color", "red"), '#', '') - charSymbol_EN_color := StrReplace(readIni("charSymbol_EN_color", "blue"), '#', '') - charSymbol_Caps_color := StrReplace(readIni("charSymbol_Caps_color", "green"), '#', '') + textSymbol_CN_color := StrReplace(readIni("textSymbol_CN_color", "red"), '#', '') + textSymbol_EN_color := StrReplace(readIni("textSymbol_EN_color", "blue"), '#', '') + textSymbol_Caps_color := StrReplace(readIni("textSymbol_Caps_color", "green"), '#', '') ; 透明度 - charSymbol_transparent := readIni('charSymbol_transparent', 222) + textSymbol_transparent := readIni('textSymbol_transparent', 222) ; 偏移量 - charSymbol_offset_x := readIni('charSymbol_offset_x', 0) - charSymbol_offset_y := readIni('charSymbol_offset_y', 45) + textSymbol_offset_x := readIni('textSymbol_offset_x', 0) + textSymbol_offset_y := readIni('textSymbol_offset_y', 45) ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) - charSymbol_border_type := readIni('charSymbol_border_type', 1) + textSymbol_border_type := readIni('textSymbol_border_type', 1) ; 字体 font_family := readIni('font_family', '微软雅黑') ; 字号 @@ -235,10 +241,10 @@ updateSymbol(init := 0) { for state in ["CN", "EN", "Caps"] { if (%state "_pic"%) { - symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") - symbolInfo.%"gui_" state%.BackColor := "000000" - WinSetTransColor("000000", symbolInfo.%"gui_" state%) - symbolInfo.%"gui_" state%.AddPicture("w" pic_symbol_width " h" pic_symbol_height, %state "_pic"%) + _ := symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + _.BackColor := "000000" + WinSetTransColor("000000", _) + _.AddPicture("w" pic_symbol_width " h" pic_symbol_height, %state "_pic"%) } } } @@ -248,17 +254,17 @@ updateSymbol(init := 0) { for state in ["CN", "EN", "Caps"] { if (%state "_color"%) { - symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + _ := symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") WinSetTransparent(transparent) try { - symbolInfo.%"gui_" state%.BackColor := %state "_color"% + _.BackColor := %state "_color"% } switch border_type { - case 1: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000001") - case 2: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000200") - case 3: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00020000") - default: symbolInfo.%"gui_" state%.Opt("-LastFound") + case 1: _.Opt("-LastFound +e0x00000001") + case 2: _.Opt("-LastFound +e0x00000200") + case 3: _.Opt("-LastFound +e0x00020000") + default: _.Opt("-LastFound") } } } @@ -270,21 +276,21 @@ updateSymbol(init := 0) { symbolInfo.fontOpt := 's' font_size * A_ScreenDPI / 96 ' c' font_color ' w' font_weight for state in ["CN", "EN", "Caps"] { if (%state "_Text"%) { - symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") - symbolInfo.%"gui_" state%.MarginX := 0, symbolInfo.%"gui_" state%.MarginY := 0 + _ := symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + _.MarginX := 0, _.MarginY := 0 try { - symbolInfo.%"gui_" state%.SetFont(symbolInfo.fontOpt, font_family) + _.SetFont(symbolInfo.fontOpt, font_family) } - symbolInfo.%"gui_" state%.AddText(, %state "_Text"%) - WinSetTransparent(charSymbol_transparent) + _.AddText(, %state "_Text"%) + WinSetTransparent(textSymbol_transparent) try { - symbolInfo.%"gui_" state%.BackColor := %"charSymbol_" state "_color"% + _.BackColor := %"textSymbol_" state "_color"% } - switch charSymbol_border_type { - case 1: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000001") - case 2: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00000200") - case 3: symbolInfo.%"gui_" state%.Opt("-LastFound +e0x00020000") - default: symbolInfo.%"gui_" state%.Opt("-LastFound") + switch textSymbol_border_type { + case 1: _.Opt("-LastFound +e0x00000001") + case 2: _.Opt("-LastFound +e0x00000200") + case 3: _.Opt("-LastFound +e0x00020000") + default: _.Opt("-LastFound") } } } @@ -327,12 +333,16 @@ reloadSymbol() { pauseApp(*) { if (A_IsPaused) { A_TrayMenu.Uncheck("暂停/运行") + TraySetIcon("InputTipSymbol/default/favicon.png", , 1) + A_IconTip := "当前状态: 【运行中】`nInputTip - 一个输入法状态提示工具" reloadSymbol() if (enableJetBrainsSupport) { runJetBrains() } } else { A_TrayMenu.Check("暂停/运行") + TraySetIcon("InputTipSymbol/default/favicon-pause.png", , 1) + A_IconTip := "当前状态: 【已暂停】`nInputTip - 一个输入法状态提示工具" hideSymbol() if (enableJetBrainsSupport) { RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") diff --git a/src/v2/utils/verify-file.ahk b/src/v2/utils/verify-file.ahk index e32cd39..debeef0 100644 --- a/src/v2/utils/verify-file.ahk +++ b/src/v2/utils/verify-file.ahk @@ -18,6 +18,12 @@ if (!FileExist("InputTipSymbol\default\Caps.png")) { if (!FileExist("InputTipSymbol\default\offer.png")) { FileInstall("InputTipSymbol\default\offer.png", "InputTipSymbol\default\offer.png", 1) } +if (!FileExist("InputTipSymbol\default\favicon.png")) { + FileInstall("img\favicon.png", "InputTipSymbol\default\favicon.png", 1) +} +if (!FileExist("InputTipSymbol\default\favicon-pause.png")) { + FileInstall("img\favicon-pause.png", "InputTipSymbol\default\favicon-pause.png", 1) +} cursor_temp_zip := A_Temp "\abgox-InputTipCursor-temp.zip" if (!DirExist("InputTipCursor") || !DirExist("InputTipCursor\default")) { @@ -56,40 +62,48 @@ waitFileInstall(path, isExit := 1) { */ checkIni() { if (!FileExist("InputTip.ini")) { + gc.init := 1 + ; 是否使用白名单机制,如果是第一次使用,就直接使用白名单机制 useWhiteList := readIni("useWhiteList", 1) isContinue := true fz := "s14" - createGui(fn1).Show() - fn1(x, y, w, h) { + createGui(confirmGui).Show() + confirmGui(info) { g := Gui("AlwaysOnTop") g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 - - g.AddText(, "你是否希望 InputTip 同步修改鼠标样式?") - g.AddText(, "InputTip") - g.AddText("yp cRed", "会根据不同输入法状态(中英文/大写锁定)同步修改鼠标样式") + g.AddText(, "你是否希望 InputTip 修改鼠标样式?") + g.AddText("xs cRed", "InputTip 会根据不同输入法状态同步修改鼠标样式") g.AddEdit("xs Disabled -VScroll", "更多详情,请点击托盘菜单中的「关于」,前往官网或项目中查看") - g.AddButton("xs cRed w" bw, "【是】对,我要修改").OnEvent("Click", yes) - yes(*) { + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + g.AddButton("xs cRed w" bw, "【是】修改鼠标样式").OnEvent("Click", e_yes) + e_yes(*) { g.Destroy() - createGui(fn).Show() - fn(x, y, w, h) { + createGui(yesGui).Show() + yesGui(info) { g := Gui("AlwaysOnTop") g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 g.AddText(, "你真的确定要修改鼠标样式吗?") g.AddText("cRed", "请谨慎选择,如果误点了确定,恢复鼠标样式需要以下步骤: `n 1. 点击「托盘菜单」=>「更改配置」`n 2. 将「1. 要不要同步修改鼠标样式」的值更改为【否】") - g.AddButton("xs cRed w" bw, "【是】对,我很确定").OnEvent("Click", yes) - yes(*) { + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + g.AddButton("xs cRed w" bw, "【是】对,我很确定").OnEvent("Click", e_yes) + e_yes(*) { g.Destroy() writeIni("changeCursor", 1) global changeCursor := 1 isContinue := false } - g.AddButton("w" bw, "【否】不,我点错了").OnEvent("Click", no) - no(*) { + g.AddButton("w" bw, "【否】不,我点错了").OnEvent("Click", e_no) + e_no(*) { g.Destroy() writeIni("changeCursor", 0) global changeCursor := 0 @@ -98,15 +112,15 @@ checkIni() { return g } } - g.AddButton("w" bw, "【否】不,保留现有样式").OnEvent("Click", no) - no(*) { + g.AddButton("w" bw, "【否】保留现有样式").OnEvent("Click", e_no) + e_no(*) { g.Destroy() writeIni("changeCursor", 0) global changeCursor := 0 isContinue := false } - g.OnEvent("Close", fn_exit) - fn_exit(*) { + g.OnEvent("Close", e_exit) + e_exit(*) { ExitApp() } return g @@ -114,25 +128,30 @@ checkIni() { while (isContinue) { Sleep(500) } - createGui(fn2).Show() - fn2(x, y, w, h) { + createGui(listTipGui).Show() + listTipGui(info) { g := Gui("AlwaysOnTop") g.SetFont(fz, "微软雅黑") - bw := w - g.MarginX * 2 - g.AddText("cRed", "对于符号显示,InputTip 现在默认使用白名单机制。") - g.AddLink("cRed", '白名单机制 : 只有在白名单中的应用进程窗口会显示符号。') - g.AddText(, "建议立即添加应用进程到白名单中。") - _c := g.AddButton("w" bw, "【是】现在就添加应用进程") - _c.OnEvent("Click", add_white_list) + g.AddLink("cRed", '白名单机制 : 只有在白名单中的应用进程窗口会显示符号。') + g.AddText(, "建议立即添加你常用的应用进程窗口到白名单中。") + if (info.i) { + return g + } + w := info.w + bw := w - g.MarginX * 2 + _c := g.AddButton("w" bw, "【是】现在去添加") _c.Focus() - g.AddButton("w" bw, "【否】不了,等一下再添加").OnEvent("Click", no) + _c.OnEvent("Click", add_white_list) add_white_list(*) { - g.Destroy() + close() fn_white_list() } - no(*) { + g.AddButton("w" bw, "【否】暂时不添加").OnEvent("Click", close) + close(*) { g.Destroy() + gc.init := 0 + checkUpdate(1, 1) } return g } From 2f8815df28e40080ba6b74256b9105d18708ae67 Mon Sep 17 00:00:00 2001 From: abgox Date: Wed, 15 Jan 2025 20:30:05 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E4=B8=BA=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=B8=8D=E5=90=8C=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8B=E7=AC=A6=E5=8F=B7=E7=9A=84=E7=8B=AC=E7=AB=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #75 --- src/v2/InputTip.ahk | 69 ++---- src/v2/menu/config.ahk | 379 +++++++++++++++++++++++++-------- src/v2/menu/cursor-mode.ahk | 130 +++++------ src/v2/menu/startup.ahk | 3 + src/v2/menu/switch-key.ahk | 99 +++++---- src/v2/menu/switch-window.ahk | 12 +- src/v2/menu/tray-menu.ahk | 2 + src/v2/utils/check-version.ahk | 50 ++++- src/v2/utils/show.ahk | 26 ++- src/v2/utils/var.ahk | 222 ++++++++++++------- src/v2/utils/verify-file.ahk | 9 + 11 files changed, 653 insertions(+), 348 deletions(-) diff --git a/src/v2/InputTip.ahk b/src/v2/InputTip.ahk index 56de775..5c1c539 100644 --- a/src/v2/InputTip.ahk +++ b/src/v2/InputTip.ahk @@ -84,25 +84,6 @@ checkUpdateDelay := readIni("checkUpdateDelay", 1440) checkUpdate(1) -cursorDir := readIni("cursorDir", "") -picDir := readIni("picDir", ":") - -SetTimer(_getDirTimer, -1) -_getDirTimer() { - _cursorDir := arrJoin(getCursorDir(), ":") - _picDir := arrJoin(getPicDir(), ":") - if (cursorDir != _cursorDir) { - global cursorDir := _cursorDir - writeIni("cursorDir", _cursorDir) - } - if (picDir != _picDir) { - global picDir := _picDir - writeIni("picDir", _picDir) - } -} - -makeTrayMenu() ; 生成托盘菜单 - ; XXX: 快捷键修改后,必须重启再生效,不重启动态修改 Hotkey 会存在问题 ; 中文快捷键 hotkey_CN := readIni('hotkey_CN', '') @@ -134,6 +115,25 @@ if (hotkey_Pause) { } } +picDir := readIni("picDir", ":") +cursorDir := readIni("cursorDir", "") + +SetTimer(getDirTimer, -1) +getDirTimer() { + _picDir := arrJoin(getPicDir(), ":") + _cursorDir := arrJoin(getCursorDir(), ":") + if (picDir != _picDir) { + global picDir := _picDir + writeIni("picDir", _picDir) + } + if (cursorDir != _cursorDir) { + global cursorDir := _cursorDir + writeIni("cursorDir", _cursorDir) + } +} + +makeTrayMenu() ; 生成托盘菜单 + needSkip(exe_str) { return InStr(modeList.JAB, exe_str) } @@ -149,37 +149,6 @@ returnCanShowSymbol(&left, &top) { #Include .\utils\show.ahk -/** - * 显示信息 - * @param {Array} msgList 字符串数组,每一项都会生成一个 Text 控件,控件之间有较大间距,如果不希望有间距,应该使用换行符拼接成一个字符串 - * @param {String} btnText 按钮文本,默认为 `确定` - * @example - * showMsg(["Hello`nWorld", "test"]) - */ -showMsg(msgList, btnText := "确定") { - g := createGuiOpt() - g.MarginX := 0 - g.AddLink("yp", "") - for item in msgList { - g.AddLink("xs", item) - } - g.Show("Hide") - g.GetPos(, , &Gui_width) - g.Destroy() - - g := createGuiOpt() - for item in msgList { - g.AddLink("w" Gui_width, item) - } - y := g.AddButton("w" Gui_width, btnText) - y.Focus() - y.OnEvent("Click", yes) - yes(*) { - g.Destroy() - } - g.Show() -} - /** * @link https://github.com/Tebayaki/AutoHotkeyScripts/blob/main/lib/GetCaretPosEx/GetCaretPosEx.ahk */ diff --git a/src/v2/menu/config.ahk b/src/v2/menu/config.ahk index 8d8c462..28f998e 100644 --- a/src/v2/menu/config.ahk +++ b/src/v2/menu/config.ahk @@ -52,7 +52,7 @@ fn_config(*) { createGui(doingGui).Show() doingGui(info) { g := createGuiOpt() - g.AddText(, "正在尝试恢复到使用 InputTip 之前的鼠标样式") + g.AddText(, "正在尝试恢复到启动 InputTip 之前的鼠标样式") g.AddText("cRed", "可能无法完全恢复,你需要进行以下额外步骤或者重启系统:`n1. 进入「系统设置」=>「蓝牙和其他设备」=>「鼠标」=>「其他鼠标设置」`n2. 先更改为另一个鼠标样式方案,再改回你之前使用的方案") if (info.i) { @@ -83,10 +83,10 @@ fn_config(*) { e_symbol_type(item, *) { writeIni("symbolType", item.value - 1) global symbolType := item.value - 1 - hideSymbol() updateSymbol() - reloadSymbol() - gc._focusSymbol.Focus() + if (symbolType) { + gc._focusSymbol.Focus() + } } g.AddText("yp w20") gc._focusSymbol := g.AddEdit("yp w1") @@ -157,17 +157,17 @@ fn_config(*) { _ := g.AddDropDownList("xs r9 w" bw, dirList) _._config := v "_cursor" _.OnEvent("Change", e_cursor_dir) - e_cursor_dir(item, *) { - writeIni(item._config, item.Text) - updateCursor() - reloadCursor() - } try { _.Text := %v "_cursor"% } catch { _.Text := "" } } + e_cursor_dir(item, *) { + writeIni(item._config, item.Text) + updateCursor() + reloadCursor() + } g.AddButton("xs w" bw, "下载鼠标样式扩展包").OnEvent("Click", e_cursor_package) e_cursor_package(*) { if (gc.w.subGui) { @@ -214,24 +214,95 @@ fn_config(*) { g.AddText(v.textOpt, v.tip ": ") _ := g.AddEdit("yp " v.editOpt " w" bw / 8) _._config := v.config - _.Value := readIni(v.config, 0) + _.Value := symbolConfig.%v.config% _.OnEvent("Change", e_pic_config) - e_pic_config(item, *) { - writeIni(item._config, returnNumber(item.value)) - hideSymbol() + } + e_pic_config(item, *) { + writeIni(item._config, returnNumber(item.value)) + updateSymbol() + restartJetBrains() + } + + fn_setIsolateConfig(item, *) { + writeIni(item._config, item.value - 1) + updateSymbol() + } + fn_writeIsolateConfig(item, *) { + if (InStr(item._config, "color")) { + writeIni(item._config, item.Value) + } else { + writeIni(item._config, returnNumber(item.Value)) + } + if (item._update) { updateSymbol() - reloadSymbol() restartJetBrains() } } - ; todo + g.AddText("xs", "是否启用") g.AddText("yp cRed", "图片符号") g.AddText("yp", "的独立配置: ") - g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + _ := g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + _.Value := symbolConfig.enableIsolateConfigPic + 1 + _.OnEvent("Change", fn_setIsolateConfig) + _._config := "enableIsolateConfigPic" + + g.AddButton("xs w" bw, "设置图片符号在不同状态下的独立配置").OnEvent("Click", e_picIsolateConfig) e_picIsolateConfig(*) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(picConfigGui).Show() + picConfigGui(info) { + g := createGuiOpt("InputTip - 设置图片符号的独立配置") + g.AddText("cRed", "图片符号") + g.AddText("yp", "的独立配置") + g.AddText("xs", "------------------------------------------------------------------------") + if (info.i) { + return g + } + + configList := [{ + config: "pic_offset_x", + textOpt: "xs", + editOpt: "", + tip: "水平偏移量" + }, { + config: "pic_symbol_width", + textOpt: "yp", + editOpt: "Number", + tip: "宽度" + }, { + config: "pic_offset_y", + textOpt: "xs", + editOpt: "", + tip: "垂直偏移量" + }, { + config: "pic_symbol_height", + textOpt: "yp", + editOpt: "Number", + tip: "高度" + }] + for state in ["CN", "EN", "Caps"] { + g.AddText("xs cRed", stateMap.%state%) + g.AddText("yp", "时的独立配置:") + for v in configList { + config := v.config state + g.AddText(v.textOpt, v.tip) + _g := g.AddEdit("yp " v.editOpt) + _g.Value := symbolConfig.%config% + _g._config := config + _g._update := symbolType = 1 && symbolConfig.enableIsolateConfigPic + _g.OnEvent("Change", fn_writeIsolateConfig) + } + } + g.AddText() + gc.w.subGui := g + return g + } } dirList := StrSplit(picDir, ":") @@ -257,16 +328,14 @@ fn_config(*) { _.OnEvent("Change", e_pic_path) e_pic_path(item, *) { writeIni(item._config, item.Text) - hideSymbol() updateSymbol() - reloadSymbol() if (symbolType = 1) { gc._focusSymbolPic.Focus() } } try { - _.Text := readIni(v "_pic", "") + _.Text := symbolConfig.%v "_pic"% } catch { _.Text := "" } @@ -305,10 +374,6 @@ fn_config(*) { colors: ["green", "#4E9A06", "#96ED89", "#66BB6A", "#8BC34A", "#45BF55", "#43A047", "#2E7D32", "#33691E"] }] symbolBlockConfig := [{ - config: "transparent", - editOpt: "Number Limit3", - tip: "方块符号的方块透明度" - }, { config: "offset_x", editOpt: "", tip: "方块符号的水平偏移量" @@ -316,6 +381,10 @@ fn_config(*) { config: "offset_y", editOpt: "", tip: "方块符号的垂直偏移量" + }, { + config: "transparent", + editOpt: "Number Limit3", + tip: "方块符号的透明度" }, { config: "symbol_height", editOpt: "Number", @@ -334,64 +403,131 @@ fn_config(*) { g.AddText("xs", v.tip ": ") _ := g.AddComboBox("yp " v.editOpt, v.colors) _._config := v.config - _.Text := readIni(v.config, "red") + _.Text := symbolConfig.%v.config% _.OnEvent("Change", e_color_config) - e_color_config(item, *) { - writeIni(item._config, item.Text) - hideSymbol() - updateSymbol() - reloadSymbol() - } + } + e_color_config(item, *) { + writeIni(item._config, item.Text) + updateSymbol() } for v in symbolBlockConfig { g.AddText("xs", v.tip ": ") _ := g.AddEdit("yp " v.editOpt) _._config := v.config - _.Value := readIni(v.config, 1) + _.Value := symbolConfig.%v.config% _.OnEvent("Change", e_block_config) - e_block_config(item, *) { - value := item.value - if (item._config = "transparent") { - if (value = "") { - return - } - if (value > 255) { - value := 255 - } + } + e_block_config(item, *) { + value := item.value + if (item._config = "transparent") { + if (value = "") { + return + } + if (value > 255) { + value := 255 } - writeIni(item._config, returnNumber(value)) - hideSymbol() - updateSymbol() - reloadSymbol() } + writeIni(item._config, returnNumber(value)) + updateSymbol() } - symbolStyle := ["无", "样式1", "样式2", "样式3"] - g.AddText("xs", "方块符号的边框样式: ") - _ := g.AddDropDownList("yp AltSubmit", symbolStyle) - _.Value := readIni("border_type", "") + 1 - _.OnEvent("Change", e_border_config) - e_border_config(item, *) { - writeIni("border_type", item.value - 1) - hideSymbol() + + fn_border_config(item, *) { + writeIni(item._config, item.value - 1) updateSymbol() - reloadSymbol() - if (symbolType = 2) { - gc._focusBlock.Focus() + if (symbolType) { + item._focus.Focus() } } + + symbolStyle := ["无", "样式1", "样式2", "样式3"] + g.AddText("xs", "方块符号的边框样式: ") + _ := g.AddDropDownList("yp AltSubmit", symbolStyle) + _.Value := symbolConfig.border_type + 1 + _._config := "border_type" + _.OnEvent("Change", fn_border_config) g.AddText("yp w20") - gc._focusBlock := g.AddEdit("yp w1") - gc._focusBlock.OnEvent("Focus", fn_clear) - gc._focusBlock.OnEvent("LoseFocus", fn_clear) + _._focus := g.AddEdit("yp w1") + _._focus.OnEvent("Focus", fn_clear) + _._focus.OnEvent("LoseFocus", fn_clear) - ; todo g.AddText("xs", "是否启用") g.AddText("yp cRed", "方块符号") g.AddText("yp", "的独立配置: ") - g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + _ := g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + _.Value := symbolConfig.enableIsolateConfigBlock + 1 + _.OnEvent("Change", fn_setIsolateConfig) + _._config := "enableIsolateConfigBlock" + g.AddButton("xs w" bw, "设置方块符号在不同状态下的独立配置").OnEvent("Click", e_blockIsolateConfig) e_blockIsolateConfig(*) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(blockConfigGui).Show() + blockConfigGui(info) { + g := createGuiOpt("InputTip - 设置方块符号的独立配置") + g.AddText("cRed", "方块符号") + g.AddText("yp", "的独立配置") + g.AddText("xs", "------------------------------------------------------------------------") + if (info.i) { + return g + } + + configList := [{ + config: "offset_x", + textOpt: "xs", + editOpt: "", + tip: "水平偏移量" + }, { + config: "symbol_width", + textOpt: "yp", + editOpt: "Number", + tip: "宽度" + }, { + config: "offset_y", + textOpt: "xs", + editOpt: "", + tip: "垂直偏移量" + }, { + config: "symbol_height", + textOpt: "yp", + editOpt: "Number", + tip: "高度" + }, { + config: "transparent", + textOpt: "xs", + editOpt: "Number Limit3", + tip: "透明度" + }] + for state in ["CN", "EN", "Caps"] { + g.AddText("xs cRed", stateMap.%state%) + g.AddText("yp", "时的独立配置:") + for v in configList { + config := v.config state + g.AddText(v.textOpt, v.tip) + _g := g.AddEdit("yp " v.editOpt) + _g.Value := symbolConfig.%config% + _g._config := config + _g._update := symbolType = 2 && symbolConfig.enableIsolateConfigBlock + _g.OnEvent("Change", fn_writeIsolateConfig) + } + config := "border_type" state + g.AddText("xs", "边框样式: ") + _ := g.AddDropDownList("yp AltSubmit", symbolStyle) + _.Value := symbolConfig.%config% +1 + _._config := config + _.OnEvent("Change", fn_border_config) + g.AddText("yp w20") + _._focus := g.AddEdit("yp w1") + _._focus.OnEvent("Focus", fn_clear) + _._focus.OnEvent("LoseFocus", fn_clear) + } + g.AddText() + gc.w.subGui := g + return g + } } tab.UseTab(5) g.AddText("Section", "1. 你应该首先查看") @@ -469,7 +605,7 @@ fn_config(*) { g.AddText(v.textOpt, v.tip ": ") _ := g.AddEdit("yp " v.editOpt) _._config := v.config - _.Value := %v.config% + _.Value := symbolConfig.%v.config% _.OnEvent("Change", e_text_config) } e_text_config(item, *) { @@ -485,38 +621,107 @@ fn_config(*) { value := returnNumber(value) } writeIni(item._config, value) - hideSymbol() updateSymbol() - reloadSymbol() } - symbolStyle := ["无", "样式1", "样式2", "样式3"] + g.AddText("xs", "文本符号的边框样式: ") _ := g.AddDropDownList("yp AltSubmit", symbolStyle) - _.Value := readIni("textSymbol_border_type", "") + 1 - _.OnEvent("Change", en_border_config2) - en_border_config2(item, *) { - writeIni("textSymbol_border_type", item.value - 1) - hideSymbol() - updateSymbol() - reloadSymbol() - if (symbolType = 3) { - gc._focusText.Focus() - } - } - + _.Value := symbolConfig.textSymbol_border_type + 1 + _._config := "textSymbol_border_type" + _.OnEvent("Change", fn_border_config) g.AddText("yp w20") - gc._focusText := g.AddEdit("yp w1") - gc._focusText.OnEvent("Focus", fn_clear) - gc._focusText.OnEvent("LoseFocus", fn_clear) + _._focus := g.AddEdit("yp w1") + _._focus.OnEvent("Focus", fn_clear) + _._focus.OnEvent("LoseFocus", fn_clear) + g.AddText() - ; todo g.AddText("xs", "是否启用") g.AddText("yp cRed", "文本符号") g.AddText("yp", "的独立配置: ") - g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + _ := g.AddDropDownList("yp AltSubmit w" bw / 2, ["【否】禁用独立配置,则上方的统一配置生效", "【是】启用独立配置,则上方的统一配置无效"]) + _.Value := symbolConfig.enableIsolateConfigText + 1 + _.OnEvent("Change", fn_setIsolateConfig) + _._config := "enableIsolateConfigText" g.AddButton("xs w" bw, "设置文本符号在不同状态下的独立配置").OnEvent("Click", e_textIsolateConfig) e_textIsolateConfig(*) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(blockConfigGui).Show() + blockConfigGui(info) { + g := createGuiOpt("InputTip - 设置文本符号的独立配置") + g.AddText("cRed", "文本符号") + g.AddText("yp", "的独立配置") + g.AddText("xs", "-----------------------------------------------------------------------------------------------------------------------") + + if (info.i) { + return g + } + configList := [{ + config: "font_family", + textOpt: "xs", + editOpt: "", + tip: "字符的字体" + }, { + config: "font_size", + textOpt: "yp", + editOpt: "Number", + tip: "字符的大小" + }, { + config: "font_weight", + textOpt: "yp", + editOpt: "", + tip: "字符的粗细" + }, { + config: "font_color", + textOpt: "xs", + editOpt: "", + tip: "字符的颜色" + }, { + config: "textSymbol_offset_x", + textOpt: "yp", + editOpt: "", + tip: "水平偏移量" + }, { + config: "textSymbol_offset_y", + textOpt: "yp", + editOpt: "Number Limit3", + tip: "垂直偏移量" + }, { + config: "textSymbol_transparent", + textOpt: "xs", + editOpt: "Number Limit3", + tip: "字符透明度" + }] + for state in ["CN", "EN", "Caps"] { + g.AddText("xs cRed", stateMap.%state%) + g.AddText("yp", "时的独立配置:") + for v in configList { + config := v.config state + g.AddText(v.textOpt, v.tip) + _g := g.AddEdit("yp " v.editOpt) + _g.Value := symbolConfig.%config% + _g._config := config + _g._update := symbolType = 3 && symbolConfig.enableIsolateConfigText + _g.OnEvent("Change", fn_writeIsolateConfig) + } + config := "textSymbol_border_type" state + g.AddText("xs", "边框样式: ") + _ := g.AddDropDownList("yp AltSubmit", symbolStyle) + _.Value := symbolConfig.%config% +1 + _._config := config + _.OnEvent("Change", fn_border_config) + g.AddText("yp w20") + _._focus := g.AddEdit("yp w1") + _._focus.OnEvent("Focus", fn_clear) + _._focus.OnEvent("LoseFocus", fn_clear) + } + g.AddText() + gc.w.subGui := g + return g + } } tab.UseTab(6) g.AddText("Section", "1. 所有配置菜单的字体大小: ") @@ -602,16 +807,4 @@ fn_config(*) { return g } SetTimer(getDirTimer, -1) - getDirTimer() { - _cursorDir := arrJoin(getCursorDir(), ":") - _picDir := arrJoin(getPicDir(), ":") - if (cursorDir != _cursorDir) { - global cursorDir := _cursorDir - writeIni("cursorDir", _cursorDir) - } - if (picDir != _picDir) { - global picDir := _picDir - writeIni("picDir", _picDir) - } - } } diff --git a/src/v2/menu/cursor-mode.ahk b/src/v2/menu/cursor-mode.ahk index b5586c4..188e2b5 100644 --- a/src/v2/menu/cursor-mode.ahk +++ b/src/v2/menu/cursor-mode.ahk @@ -237,83 +237,83 @@ fn_cursor_mode(*) { _ := g.AddButton(opt " w" bw / 4, v) _._mode := v _.OnEvent("Click", e_handle) - e_handle(item, *) { - to := item._mode - exe_name := gc._exe_name.value - g.Destroy() - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" - } - createGui(errGui).Show() - errGui(info) { - g := createGuiOpt() - g.AddText("cRed", exe_name) - g.AddText("yp", "是一个错误的应用进程名称") - g.AddText("xs cRed", '正确的应用进程名称是 xxx.exe 这样的格式`n同时文件名中不能包含这些英文符号 \ / : * ? " < >|') - - if (info.i) { - return g - } - w := info.w - bw := w - g.MarginX * 2 + } + e_handle(item, *) { + to := item._mode + exe_name := gc._exe_name.value + g.Destroy() + if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "是一个错误的应用进程名称") + g.AddText("xs cRed", '正确的应用进程名称是 xxx.exe 这样的格式`n同时文件名中不能包含这些英文符号 \ / : * ? " < >|') - y := g.AddButton("xs w" bw, "重新输入") - y.Focus() - y.OnEvent("click", e_close) - e_close(*) { - g.Destroy() - addApp(exe_name) - } - gc.w.subGui := g + if (info.i) { return g } - return - } + w := info.w + bw := w - g.MarginX * 2 - config := "cursor_mode_" to - value := readIni(config, "") - - if (InStr(":" value ":", ":" exe_name ":")) { - if (gc.w.subGui) { - gc.w.subGui.Destroy() - gc.w.subGui := "" + y := g.AddButton("xs w" bw, "重新输入") + y.Focus() + y.OnEvent("click", e_close) + e_close(*) { + g.Destroy() + addApp(exe_name) } - createGui(existGui).Show() - existGui(info) { - g := createGuiOpt() - g.AddText("cRed", exe_name) - g.AddText("yp", "这个应用进程已经存在了") + gc.w.subGui := g + return g + } + return + } - if (info.i) { - return g - } - w := info.w - bw := w - g.MarginX * 2 + config := "cursor_mode_" to + value := readIni(config, "") + + if (InStr(":" value ":", ":" exe_name ":")) { + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(existGui).Show() + existGui(info) { + g := createGuiOpt() + g.AddText("cRed", exe_name) + g.AddText("yp", "这个应用进程已经存在了") - g.AddButton("xs w" bw, "重新输入").OnEvent("click", e_close) - e_close(*) { - g.Destroy() - addApp(exe_name) - } - gc.w.subGui := g + if (info.i) { return g } - return - } + w := info.w + bw := w - g.MarginX * 2 - gc.%"LV_" to%.Add(, exe_name) - v := gc.%to "_title"%.Value - gc.%to "_title"%.Value := SubStr(v, 1, InStr(v, " ")) "( " gc.%"LV_" to%.GetCount() " 个 )" - if (value) { - writeIni(config, value ":" exe_name) - } else { - writeIni(config, exe_name) + g.AddButton("xs w" bw, "重新输入").OnEvent("click", e_close) + e_close(*) { + g.Destroy() + addApp(exe_name) + } + gc.w.subGui := g + return g } - updateWhiteList(exe_name) - updateCursorMode(config != "cursor_mode_JAB") + return + } + + gc.%"LV_" to%.Add(, exe_name) + v := gc.%to "_title"%.Value + gc.%to "_title"%.Value := SubStr(v, 1, InStr(v, " ")) "( " gc.%"LV_" to%.GetCount() " 个 )" + if (value) { + writeIni(config, value ":" exe_name) + } else { + writeIni(config, exe_name) } + updateWhiteList(exe_name) + updateCursorMode(config != "cursor_mode_JAB") } gc.w.subGui := g return g diff --git a/src/v2/menu/startup.ahk b/src/v2/menu/startup.ahk index ed2b916..4b37b93 100644 --- a/src/v2/menu/startup.ahk +++ b/src/v2/menu/startup.ahk @@ -48,6 +48,7 @@ fn_startup(item, *) { g := createGuiOpt("InputTip - 设置开机自启动") g.AddLink(, '详情请查看: 关于开机自启动') g.AddText(, "---------------------------------------------------------------------") + if (info.i) { return g } @@ -97,12 +98,14 @@ fn_startup(item, *) { g := createGuiOpt() g.AddText("cRed", "添加注册表失败!") g.AddText("cRed", "你需要考虑使用其他方式设置开机自启动") + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + g.AddButton("w" bw, "我知道了").OnEvent("Click", e_close) e_close(*) { g.Destroy() diff --git a/src/v2/menu/switch-key.ahk b/src/v2/menu/switch-key.ahk index e23c166..a08ed8a 100644 --- a/src/v2/menu/switch-key.ahk +++ b/src/v2/menu/switch-key.ahk @@ -42,26 +42,8 @@ fn_switch_key(*) { _._config := v.config _._with := v.with _.OnEvent("Change", e_change_hotkey) - e_change_hotkey(item, *) { - static last := "" - if (last = item.value) { - return - } - last := item.value - - ; 同步修改到「设置组合快捷键」和「手动输入快捷键」 - if (item.Text = "无") { - key := "" - } else { - key := "~" item.Text " Up" - } - gc.%item._config "2"%.Value := "" - gc.%item._config "3"%.Value := key - gc.%item._with%.Value := 0 - } config := readIni(v.config, "") - if (config ~= "^~\w+\sUp$") { try { _.Text := Trim(StrReplace(StrReplace(config, "~", ""), "Up", "")) @@ -75,6 +57,23 @@ fn_switch_key(*) { _.Text := "无" } } + e_change_hotkey(item, *) { + static last := "" + if (last = item.value) { + return + } + last := item.value + + ; 同步修改到「设置组合快捷键」和「手动输入快捷键」 + if (item.Text = "无") { + key := "" + } else { + key := "~" item.Text " Up" + } + gc.%item._config "2"%.Value := "" + gc.%item._config "3"%.Value := key + gc.%item._with%.Value := 0 + } tab.UseTab(2) g.AddText("Section", "1.") g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") @@ -91,26 +90,26 @@ fn_switch_key(*) { _._config := v.config _._with := v.with _.OnEvent("Change", e_change_hotkey1) - e_change_hotkey1(item, *) { - ; 同步修改到「设置单键」和「手动输入快捷键」 - gc.%item._config%.Text := "无" - v := item.value - if (gc.%item._with%.Value) { - v := "#" v - } - gc.%item._config "3"%.Value := v - } gc.%v.with% := g.AddCheckbox("yp", "Win 键") gc.%v.with%._config := v.config gc.%v.with%.OnEvent("Click", e_win_key) - e_win_key(item, *) { - ; 同步修改到「设置单键」和「手动输入快捷键」 - gc.%item._config%.Text := "无" - v := gc.%item._config "2"%.Value - gc.%item._config "3"%.Value := item.value ? "#" v : v - } gc.%v.with%.Value := InStr(value, "#") ? 1 : 0 } + e_change_hotkey1(item, *) { + ; 同步修改到「设置单键」和「手动输入快捷键」 + gc.%item._config%.Text := "无" + v := item.value + if (gc.%item._with%.Value) { + v := "#" v + } + gc.%item._config "3"%.Value := v + } + e_win_key(item, *) { + ; 同步修改到「设置单键」和「手动输入快捷键」 + gc.%item._config%.Text := "无" + v := gc.%item._config "2"%.Value + gc.%item._config "3"%.Value := item.value ? "#" v : v + } tab.UseTab(3) g.AddText("Section", "1.") g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") @@ -127,24 +126,24 @@ fn_switch_key(*) { _._with := v.with _.Value := readIni(v.config, '') _.OnEvent("Change", e_change_hotkey2) - e_change_hotkey2(item, *) { - gc.%item._with%.Value := InStr(item.value, "#") ? 1 : 0 - ; 当输入的快捷键符合单键时,同步修改 - if (item.value ~= "^~\w+\sUp$") { - try { - gc.%item._config%.Text := Trim(StrReplace(StrReplace(item.value, "~", ""), "Up", "")) - } catch { - gc.%item._config%.Text := "无" - } - gc.%item._config "2"%.Value := "" - } else { + } + e_change_hotkey2(item, *) { + gc.%item._with%.Value := InStr(item.value, "#") ? 1 : 0 + ; 当输入的快捷键符合单键时,同步修改 + if (item.value ~= "^~\w+\sUp$") { + try { + gc.%item._config%.Text := Trim(StrReplace(StrReplace(item.value, "~", ""), "Up", "")) + } catch { gc.%item._config%.Text := "无" - ; 当输入的快捷键符合组合快捷键时,同步修改 - try { - gc.%item._config "2"%.Value := StrReplace(item.value, "#", "") - } catch { - gc.%item._config "2"%.Value := "" - } + } + gc.%item._config "2"%.Value := "" + } else { + gc.%item._config%.Text := "无" + ; 当输入的快捷键符合组合快捷键时,同步修改 + try { + gc.%item._config "2"%.Value := StrReplace(item.value, "#", "") + } catch { + gc.%item._config "2"%.Value := "" } } } diff --git a/src/v2/menu/switch-window.ahk b/src/v2/menu/switch-window.ahk index de9c61d..49008c8 100644 --- a/src/v2/menu/switch-window.ahk +++ b/src/v2/menu/switch-window.ahk @@ -78,9 +78,9 @@ fn_switch_window(*) { gc.Caps_title := g.AddText("yp w" bw / 3, "大写锁定") if (symbolType = 3) { - c := textSymbol_CN_color ? "c" StrReplace(textSymbol_CN_color, "#") : "" + c := symbolConfig.textSymbol_CN_color ? "c" StrReplace(symbolConfig.textSymbol_CN_color, "#") : "" } else { - c := CN_color ? "c" StrReplace(CN_color, "#") : "" + c := symbolConfig.CN_color ? "c" StrReplace(symbolConfig.CN_color, "#") : "" } try { gc.LV_CN := g.AddListView("xs -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["中文状态"]) @@ -93,9 +93,9 @@ fn_switch_window(*) { gc.LV_CN._type := "CN" if (symbolType = 3) { - c := textSymbol_EN_color ? "c" StrReplace(textSymbol_EN_color, "#") : "" + c := symbolConfig.textSymbol_EN_color ? "c" StrReplace(symbolConfig.textSymbol_EN_color, "#") : "" } else { - c := EN_color ? "c" StrReplace(EN_color, "#") : "" + c := symbolConfig.EN_color ? "c" StrReplace(symbolConfig.EN_color, "#") : "" } try { gc.LV_EN := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["英文状态"]) @@ -108,9 +108,9 @@ fn_switch_window(*) { gc.LV_EN._type := "EN" if (symbolType = 3) { - c := textSymbol_Caps_color ? "c" StrReplace(textSymbol_Caps_color, "#") : "" + c := symbolConfig.textSymbol_Caps_color ? "c" StrReplace(symbolConfig.textSymbol_Caps_color, "#") : "" } else { - c := Caps_color ? "c" StrReplace(Caps_color, "#") : "" + c := symbolConfig.Caps_color ? "c" StrReplace(symbolConfig.Caps_color, "#") : "" } try { gc.LV_Caps := g.AddListView("yp -Hdr -LV0x10 -Multi r5 NoSortHdr Sort Grid w" bw / 3 " " c, ["大写锁定"]) diff --git a/src/v2/menu/tray-menu.ahk b/src/v2/menu/tray-menu.ahk index 1f3690e..1fdfd49 100644 --- a/src/v2/menu/tray-menu.ahk +++ b/src/v2/menu/tray-menu.ahk @@ -177,11 +177,13 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { g.AddLink("yp cRed", exe_name) g.AddLink("yp", tipList.%from "Confirm2"%) g.AddLink("xs", tipList.%from "Confirm3"%) + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + if (from = "add") { _ := g.AddButton("xs w" bw, "添加") _.Focus() diff --git a/src/v2/utils/check-version.ahk b/src/v2/utils/check-version.ahk index 008c105..bc687c3 100644 --- a/src/v2/utils/check-version.ahk +++ b/src/v2/utils/check-version.ahk @@ -114,11 +114,13 @@ checkUpdate(init := 0, once := false) { g.AddText("xs", "---------------------------------------------------------") g.AddLink("xs", '版本更新日志: 官网 Github Gitee') g.AddText("cRed", "点击确认更新后,会自动下载新版本替代旧版本并重启`n") + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + y := g.AddButton("xs w" bw, "确认更新") y.Focus() y.OnEvent("Click", e_yes) @@ -166,11 +168,13 @@ checkUpdate(init := 0, once := false) { g.AddLink("yp", 'https://github.com/abgox/InputTip') g.AddText("xs", "Gitee: :") g.AddLink("yp", 'https://gitee.com/abgox/InputTip') + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + y := g.AddButton("xs w" bw, "我知道了") y.Focus() y.OnEvent("Click", yes) @@ -191,7 +195,26 @@ checkUpdate(init := 0, once := false) { g.Destroy() global checkUpdateDelay := 0 writeIni("checkUpdateDelay", 0) - showMsg(["忽略版本更新成功!", "如果你在使用过程中有任何问题,首先需要确定是否为最新版本。", "如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue", "Github 和其他相关地址可以在软件托盘菜单的 「关于」 中找到"], "我知道了") + createGui(doneGui).Show() + doneGui(info) { + g := createGuiOpt() + g.AddText(, "InputTip 的") + g.AddText("yp cRed", "版本更新检查") + g.AddText("yp", "已忽略") + g.AddText("xs", "修改方式:「托盘菜单」=>「设置更新检查」") + + g.AddText("cGray", "如果你在使用过程中有任何问题,先检查版本是否为最新版本`n如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue`nGithub 和其他相关地址可以在软件托盘菜单的「关于」中找到") + + if (info.i) { + return g + } + + g.AddButton("w" info.w, "我知道了").OnEvent("Click", yes) + yes(*) { + g.Destroy() + } + return g + } } g.OnEvent("Close", e_close) e_close(*) { @@ -222,11 +245,13 @@ checkUpdate(init := 0, once := false) { g.AddText("xs", "---------------------------------------------------------------------") g.AddLink("xs", '项目仓库地址: Github Gitee') g.AddLink("xs", '版本更新日志: 官网 Github Gitee') + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + y := g.AddButton("w" bw, "我知道了") y.Focus() y.OnEvent("Click", yes) @@ -240,7 +265,26 @@ checkUpdate(init := 0, once := false) { g.Destroy() global checkUpdateDelay := 0 writeIni("checkUpdateDelay", 0) - showMsg(["忽略版本更新成功!", "如果你在使用过程中有任何问题,首先需要确定是否为最新版本。", "如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue", "Github 和其他相关地址可以在软件托盘菜单的 「关于」 中找到"], "我知道了") + createGui(doneGui).Show() + doneGui(info) { + g := createGuiOpt() + g.AddText(, "InputTip 的") + g.AddText("yp cRed", "版本更新检查") + g.AddText("yp", "已忽略") + g.AddText("xs", "修改方式:「托盘菜单」=>「设置更新检查」") + + g.AddText("cGray", "如果你在使用过程中有任何问题,先检查版本是否为最新版本`n如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue`nGithub 和其他相关地址可以在软件托盘菜单的「关于」中找到") + + if (info.i) { + return g + } + + g.AddButton("w" info.w, "我知道了").OnEvent("Click", yes) + yes(*) { + g.Destroy() + } + return g + } } return g } @@ -319,11 +363,13 @@ checkUpdateDone() { g.AddText("xs", "-------------------------------------------") g.AddText("xs", "建议查看更新日志,了解最新变化") g.AddLink("xs", '版本更新日志: 官网 Github Gitee') + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + y := g.AddButton("xs w" bw, "我知道了") y.Focus() y.OnEvent("Click", yes) diff --git a/src/v2/utils/show.ahk b/src/v2/utils/show.ahk index 21ecfe8..b787567 100644 --- a/src/v2/utils/show.ahk +++ b/src/v2/utils/show.ahk @@ -160,14 +160,28 @@ loadSymbol(state, left, top) { } showConfig := "NA " if (symbolType = 1) { - showConfig .= "x" left + pic_offset_x "y" top + pic_offset_y + _ := symbolConfig.enableIsolateConfigPic + x := _ ? symbolConfig.%"pic_offset_x" state% : symbolConfig.pic_offset_x + y := _ ? symbolConfig.%"pic_offset_y" state% : symbolConfig.pic_offset_y + + showConfig .= "x" left + x "y" top + y } else if (symbolType = 2) { - showConfig .= "w" symbol_width "h" symbol_height "x" left + offset_x "y" top + offset_y + _ := symbolConfig.enableIsolateConfigBlock + w := _ ? symbolConfig.%"symbol_width" state% : symbolConfig.symbol_width + h := _ ? symbolConfig.%"symbol_height" state% : symbolConfig.symbol_height + x := _ ? symbolConfig.%"offset_x" state% : symbolConfig.offset_x + y := _ ? symbolConfig.%"offset_y" state% : symbolConfig.offset_y + + showConfig .= "w" w "h" h "x" left + x "y" top + y } else if (symbolType = 3) { - showConfig .= "x" left + textSymbol_offset_x "y" top + textSymbol_offset_y + _ := symbolConfig.enableIsolateConfigText + x := _ ? symbolConfig.%"textSymbol_offset_x" state% : symbolConfig.textSymbol_offset_x + y := _ ? symbolConfig.%"textSymbol_offset_y" state% : symbolConfig.textSymbol_offset_y + + showConfig .= "x" left + x "y" top + y } - if (symbolInfo.%"gui_" state%) { - symbolInfo.%"gui_" state%.Show(showConfig) + if (symbolGui.%state%) { + symbolGui.%state%.Show(showConfig) } lastSymbol := state @@ -177,7 +191,7 @@ loadSymbol(state, left, top) { hideSymbol() { for state in ["CN", "EN", "Caps"] { try { - symbolInfo.%"gui_" state%.Hide() + symbolGui.%state%.Hide() } } global lastSymbol := "" diff --git a/src/v2/utils/var.ahk b/src/v2/utils/var.ahk index 28169f4..e827221 100644 --- a/src/v2/utils/var.ahk +++ b/src/v2/utils/var.ahk @@ -126,8 +126,6 @@ stateMap := { Caps: "大写锁定" } -updateSymbol(1) - left := 0, top := 0 lastWindow := "", lastSymbol := "", lastCursor := "" @@ -141,6 +139,8 @@ isWait := 0 canShowSymbol := 0 +updateSymbol(1) + updateCursor(init := 0) { global CN_cursor, EN_cursor, Caps_cursor, cursorInfo @@ -171,96 +171,153 @@ updateCursor(init := 0) { } updateSymbol(init := 0) { - global + global symbolGui, symbolConfig + + hideSymbol() if (!init) { restartJetBrains() } ; 存放不同状态下的符号 - symbolInfo := { - gui_EN: "", - gui_CN: "", - gui_Caps: "" + symbolGui := { + EN: "", + CN: "", + Caps: "" + } + symbolConfig := { + ; 启用独立配置 + enableIsolateConfigPic: readIni("enableIsolateConfigPic", "0"), + enableIsolateConfigBlock: readIni("enableIsolateConfigBlock", "0"), + enableIsolateConfigText: readIni("enableIsolateConfigText", "0"), } - ; * 图片字符相关配置 - ; 宽高 - pic_symbol_width := readIni('pic_symbol_width', 9) * A_ScreenDPI / 96 - pic_symbol_height := readIni('pic_symbol_height', 9) * A_ScreenDPI / 96 - ; 文件路径 - CN_pic := readIni("CN_pic", "InputTipSymbol\default\CN.png") - EN_pic := readIni("EN_pic", "InputTipSymbol\default\EN.png") - Caps_pic := readIni("Caps_pic", "InputTipSymbol\default\Caps.png") - ; 偏移量 - pic_offset_x := readIni('pic_offset_x', -30) - pic_offset_y := readIni('pic_offset_y', -40) - ; * 方块符号相关配置 - ; 背景颜色 - CN_color := StrReplace(readIni("CN_color", "red"), '#', '') - EN_color := StrReplace(readIni("EN_color", "blue"), '#', '') - Caps_color := StrReplace(readIni("Caps_color", "green"), '#', '') - ; 透明度 - transparent := readIni('transparent', 222) - ; 偏移量 - offset_x := readIni('offset_x', 10) - offset_y := readIni('offset_y', -30) - ; 宽高 - symbol_width := readIni('symbol_width', 6) * A_ScreenDPI / 96 - symbol_height := readIni('symbol_height', 6) * A_ScreenDPI / 96 - ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) - border_type := readIni('border_type', 1) - ; * 文本符号相关配置 - ; 背景颜色 - textSymbol_CN_color := StrReplace(readIni("textSymbol_CN_color", "red"), '#', '') - textSymbol_EN_color := StrReplace(readIni("textSymbol_EN_color", "blue"), '#', '') - textSymbol_Caps_color := StrReplace(readIni("textSymbol_Caps_color", "green"), '#', '') - ; 透明度 - textSymbol_transparent := readIni('textSymbol_transparent', 222) - ; 偏移量 - textSymbol_offset_x := readIni('textSymbol_offset_x', 0) - textSymbol_offset_y := readIni('textSymbol_offset_y', 45) - ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) - textSymbol_border_type := readIni('textSymbol_border_type', 1) - ; 字体 - font_family := readIni('font_family', '微软雅黑') - ; 字号 - font_size := readIni('font_size', 7) - ; 粗细 - font_weight := readIni('font_weight', 600) - ; 颜色 - font_color := StrReplace(readIni('font_color', 'ffffff'), '#', '') - ; 显示文本 - CN_Text := readIni('CN_Text', '中') - EN_Text := readIni('EN_Text', '英') - Caps_Text := readIni('Caps_Text', '大') + infoCN := { + CN_color: "red", + CN_Text: "中", + textSymbol_CN_color: "red", + } + infoEN := { + EN_color: "blue", + EN_Text: "英", + textSymbol_EN_color: "blue", + } + infoCaps := { + Caps_color: "green", + Caps_Text: "大", + textSymbol_Caps_color: "green", + } + + for state in ["", "CN", "EN", "Caps"] { + ; * 图片字符相关配置 + ; 文件路径 + if (state) { + symbolConfig.%state "_pic"% := readIni(state "_pic", "InputTipSymbol\default\" state ".png") + } + ; 偏移量 + _ := "pic_offset_x" state + symbolConfig.%_% := readIni(_, -30) + _ := "pic_offset_y" state + symbolConfig.%_% := readIni(_, -40) + ; 宽高 + _ := "pic_symbol_width" state + symbolConfig.%_% := readIni(_, 15) + _ := "pic_symbol_height" state + symbolConfig.%_% := readIni(_, 15) + + ; * 方块符号相关配置 + ; 背景颜色 + if (state) { + _ := state "_color" + symbolConfig.%_% := StrReplace(readIni(_, %"info" state%.%_%), '#', '') + } + ; 偏移量 + _ := "offset_x" state + symbolConfig.%_% := readIni(_, 10) + _ := "offset_y" state + symbolConfig.%_% := readIni(_, -30) + ; 透明度 + _ := "transparent" state + symbolConfig.%_% := readIni(_, 222) + ; 宽高 + _ := "symbol_width" state + symbolConfig.%_% := readIni(_, 9) + _ := "symbol_height" state + symbolConfig.%_% := readIni(_, 9) + ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) + _ := "border_type" state + symbolConfig.%_% := readIni(_, 1) + + ; * 文本符号相关配置 + ; 文本字符 + if (state) { + _ := state "_Text" + symbolConfig.%_% := readIni(_, %"info" state%.%_%) + } + ; 背景颜色 + if (state) { + _ := "textSymbol_" state "_color" + symbolConfig.%_% := StrReplace(readIni(_, %"info" state%.%_%), '#', '') + } + ; 字体 + _ := "font_family" state + symbolConfig.%_% := readIni(_, '微软雅黑') + ; 大小 + _ := "font_size" state + symbolConfig.%_% := readIni(_, 12) + ; 粗细 + _ := "font_weight" state + symbolConfig.%_% := readIni(_, 600) + ; 颜色 + _ := "font_color" state + symbolConfig.%_% := StrReplace(readIni(_, 'ffffff'), '#', '') + ; 偏移量 + _ := "textSymbol_offset_x" state + symbolConfig.%_% := readIni(_, 0) + _ := "textSymbol_offset_y" state + symbolConfig.%_% := readIni(_, 45) + ; 透明度 + _ := "textSymbol_transparent" state + symbolConfig.%_% := readIni(_, 222) + ; 边框样式: 0(无边框),1(样式1),2(样式2),3(样式3) + _ := "textSymbol_border_type" state + symbolConfig.%_% := readIni(_, 1) + } switch symbolType { case 1: { ; 图片字符 - for state in ["CN", "EN", "Caps"] { - if (%state "_pic"%) { - _ := symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + if (symbolConfig.%state "_pic"%) { + _ := symbolGui.%state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + __ := symbolConfig.enableIsolateConfigPic + _.BackColor := "000000" WinSetTransColor("000000", _) - _.AddPicture("w" pic_symbol_width " h" pic_symbol_height, %state "_pic"%) + + w := __ ? symbolConfig.%"pic_symbol_width" state% : symbolConfig.pic_symbol_width + h := __ ? symbolConfig.%"pic_symbol_height" state% : symbolConfig.pic_symbol_height + _.AddPicture("w" w " h" h, symbolConfig.%state "_pic"%) } } } case 2: { ; 方块符号 - for state in ["CN", "EN", "Caps"] { - if (%state "_color"%) { - _ := symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") - WinSetTransparent(transparent) + if (symbolConfig.%state "_color"%) { + _ := symbolGui.%state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + __ := symbolConfig.enableIsolateConfigBlock + + t := __ ? symbolConfig.%"transparent" state% : symbolConfig.transparent + WinSetTransparent(t) + try { - _.BackColor := %state "_color"% + _.BackColor := symbolConfig.%state "_color"% } - switch border_type { + bt := __ ? symbolConfig.%"border_type" state% : symbolConfig.border_type + switch bt { case 1: _.Opt("-LastFound +e0x00000001") case 2: _.Opt("-LastFound +e0x00000200") case 3: _.Opt("-LastFound +e0x00020000") @@ -272,21 +329,32 @@ updateSymbol(init := 0) { case 3: { ; 文本符号 - - symbolInfo.fontOpt := 's' font_size * A_ScreenDPI / 96 ' c' font_color ' w' font_weight for state in ["CN", "EN", "Caps"] { - if (%state "_Text"%) { - _ := symbolInfo.%"gui_" state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + if (symbolConfig.%state "_Text"%) { + _ := symbolGui.%state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") + __ := symbolConfig.enableIsolateConfigText + _.MarginX := 0, _.MarginY := 0 + + ff := __ ? symbolConfig.%"font_family" state% : symbolConfig.font_family + fz := __ ? symbolConfig.%"font_size" state% : symbolConfig.font_size + fc := __ ? symbolConfig.%"font_color" state% : symbolConfig.font_color + fw := __ ? symbolConfig.%"font_weight" state% : symbolConfig.font_weight try { - _.SetFont(symbolInfo.fontOpt, font_family) + _.SetFont('s' fz ' c' fc ' w' fw, ff) } - _.AddText(, %state "_Text"%) - WinSetTransparent(textSymbol_transparent) + + _.AddText(, symbolConfig.%state "_Text"%) + + t := __ ? symbolConfig.%"textSymbol_transparent" state% : symbolConfig.textSymbol_transparent + WinSetTransparent(t) + try { - _.BackColor := %"textSymbol_" state "_color"% + _.BackColor := symbolConfig.%"textSymbol_" state "_color"% } - switch textSymbol_border_type { + + bt := __ ? symbolConfig.%"textSymbol_border_type" state% : symbolConfig.textSymbol_border_type + switch bt { case 1: _.Opt("-LastFound +e0x00000001") case 2: _.Opt("-LastFound +e0x00000200") case 3: _.Opt("-LastFound +e0x00020000") @@ -296,6 +364,8 @@ updateSymbol(init := 0) { } } } + + reloadSymbol() } reloadCursor() { diff --git a/src/v2/utils/verify-file.ahk b/src/v2/utils/verify-file.ahk index debeef0..348b249 100644 --- a/src/v2/utils/verify-file.ahk +++ b/src/v2/utils/verify-file.ahk @@ -64,6 +64,9 @@ checkIni() { if (!FileExist("InputTip.ini")) { gc.init := 1 + ; 输入法模式 + mode := readIni("mode", 1, "InputMethod") + ; 是否使用白名单机制,如果是第一次使用,就直接使用白名单机制 useWhiteList := readIni("useWhiteList", 1) @@ -76,11 +79,13 @@ checkIni() { g.AddText(, "你是否希望 InputTip 修改鼠标样式?") g.AddText("xs cRed", "InputTip 会根据不同输入法状态同步修改鼠标样式") g.AddEdit("xs Disabled -VScroll", "更多详情,请点击托盘菜单中的「关于」,前往官网或项目中查看") + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + g.AddButton("xs cRed w" bw, "【是】修改鼠标样式").OnEvent("Click", e_yes) e_yes(*) { g.Destroy() @@ -90,11 +95,13 @@ checkIni() { g.SetFont(fz, "微软雅黑") g.AddText(, "你真的确定要修改鼠标样式吗?") g.AddText("cRed", "请谨慎选择,如果误点了确定,恢复鼠标样式需要以下步骤: `n 1. 点击「托盘菜单」=>「更改配置」`n 2. 将「1. 要不要同步修改鼠标样式」的值更改为【否】") + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + g.AddButton("xs cRed w" bw, "【是】对,我很确定").OnEvent("Click", e_yes) e_yes(*) { g.Destroy() @@ -135,11 +142,13 @@ checkIni() { g.AddText("cRed", "对于符号显示,InputTip 现在默认使用白名单机制。") g.AddLink("cRed", '白名单机制 : 只有在白名单中的应用进程窗口会显示符号。') g.AddText(, "建议立即添加你常用的应用进程窗口到白名单中。") + if (info.i) { return g } w := info.w bw := w - g.MarginX * 2 + _c := g.AddButton("w" bw, "【是】现在去添加") _c.Focus() _c.OnEvent("Click", add_white_list) From 4d8a7d8cd0e255285cb1682b76dd5ae0bb8de562 Mon Sep 17 00:00:00 2001 From: abgox Date: Wed, 15 Jan 2025 21:25:52 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=B3=95=E6=A8=A1=E5=BC=8F=E7=AD=89=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + README.md | 19 +- src/v2/CHANGELOG.md | 37 +++- src/v2/InputTip.JAB.JetBrains.exe | Bin 1355264 -> 1399808 bytes src/v2/InputTip.ahk | 10 +- .../InputTipCursor/default/CN/AppStarting.ani | Bin 0 -> 206580 bytes src/v2/InputTipCursor/default/CN/Arrow.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/Cross.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/Hand.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/Help.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/IBeam.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/No.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/Pen.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/SizeAll.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/SizeNESW.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/SizeNS.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/SizeNWSE.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/SizeWE.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/UpArrow.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/CN/Wait.ani | Bin 0 -> 206580 bytes .../default/Caps/AppStarting.ani | Bin 0 -> 206580 bytes src/v2/InputTipCursor/default/Caps/Arrow.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/Cross.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/Hand.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/Help.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/IBeam.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/No.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/Pen.cur | Bin 0 -> 59566 bytes .../InputTipCursor/default/Caps/SizeAll.cur | Bin 0 -> 59566 bytes .../InputTipCursor/default/Caps/SizeNESW.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/SizeNS.cur | Bin 0 -> 59566 bytes .../InputTipCursor/default/Caps/SizeNWSE.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/SizeWE.cur | Bin 0 -> 59566 bytes .../InputTipCursor/default/Caps/UpArrow.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/Caps/Wait.ani | Bin 0 -> 206580 bytes .../InputTipCursor/default/EN/AppStarting.ani | Bin 0 -> 206580 bytes src/v2/InputTipCursor/default/EN/Arrow.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/Cross.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/Hand.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/Help.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/IBeam.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/No.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/Pen.cur | Bin 0 -> 30894 bytes src/v2/InputTipCursor/default/EN/SizeAll.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/SizeNESW.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/SizeNS.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/SizeNWSE.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/SizeWE.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/UpArrow.cur | Bin 0 -> 59566 bytes src/v2/InputTipCursor/default/EN/wait.ani | Bin 0 -> 206580 bytes src/v2/menu/JAB.ahk | 15 +- src/v2/menu/app-offset.ahk | 4 +- src/v2/menu/bw-list.ahk | 4 +- src/v2/menu/config.ahk | 73 +++++-- src/v2/menu/cursor-mode.ahk | 2 +- src/v2/menu/input-mode.ahk | 112 +++++----- src/v2/menu/startup.ahk | 12 +- src/v2/menu/switch-window.ahk | 2 +- src/v2/menu/tray-menu.ahk | 59 ++++- src/v2/utils/IME.ahk | 83 ++++--- src/v2/utils/check-version.ahk | 36 ++-- src/v2/utils/options.ahk | 4 +- src/v2/utils/show.ahk | 66 ------ src/v2/utils/var.ahk | 203 ++++++++++++------ src/v2/utils/verify-file.ahk | 164 +++++++++++--- 65 files changed, 590 insertions(+), 317 deletions(-) create mode 100644 .gitignore create mode 100644 src/v2/InputTipCursor/default/CN/AppStarting.ani create mode 100644 src/v2/InputTipCursor/default/CN/Arrow.cur create mode 100644 src/v2/InputTipCursor/default/CN/Cross.cur create mode 100644 src/v2/InputTipCursor/default/CN/Hand.cur create mode 100644 src/v2/InputTipCursor/default/CN/Help.cur create mode 100644 src/v2/InputTipCursor/default/CN/IBeam.cur create mode 100644 src/v2/InputTipCursor/default/CN/No.cur create mode 100644 src/v2/InputTipCursor/default/CN/Pen.cur create mode 100644 src/v2/InputTipCursor/default/CN/SizeAll.cur create mode 100644 src/v2/InputTipCursor/default/CN/SizeNESW.cur create mode 100644 src/v2/InputTipCursor/default/CN/SizeNS.cur create mode 100644 src/v2/InputTipCursor/default/CN/SizeNWSE.cur create mode 100644 src/v2/InputTipCursor/default/CN/SizeWE.cur create mode 100644 src/v2/InputTipCursor/default/CN/UpArrow.cur create mode 100644 src/v2/InputTipCursor/default/CN/Wait.ani create mode 100644 src/v2/InputTipCursor/default/Caps/AppStarting.ani create mode 100644 src/v2/InputTipCursor/default/Caps/Arrow.cur create mode 100644 src/v2/InputTipCursor/default/Caps/Cross.cur create mode 100644 src/v2/InputTipCursor/default/Caps/Hand.cur create mode 100644 src/v2/InputTipCursor/default/Caps/Help.cur create mode 100644 src/v2/InputTipCursor/default/Caps/IBeam.cur create mode 100644 src/v2/InputTipCursor/default/Caps/No.cur create mode 100644 src/v2/InputTipCursor/default/Caps/Pen.cur create mode 100644 src/v2/InputTipCursor/default/Caps/SizeAll.cur create mode 100644 src/v2/InputTipCursor/default/Caps/SizeNESW.cur create mode 100644 src/v2/InputTipCursor/default/Caps/SizeNS.cur create mode 100644 src/v2/InputTipCursor/default/Caps/SizeNWSE.cur create mode 100644 src/v2/InputTipCursor/default/Caps/SizeWE.cur create mode 100644 src/v2/InputTipCursor/default/Caps/UpArrow.cur create mode 100644 src/v2/InputTipCursor/default/Caps/Wait.ani create mode 100644 src/v2/InputTipCursor/default/EN/AppStarting.ani create mode 100644 src/v2/InputTipCursor/default/EN/Arrow.cur create mode 100644 src/v2/InputTipCursor/default/EN/Cross.cur create mode 100644 src/v2/InputTipCursor/default/EN/Hand.cur create mode 100644 src/v2/InputTipCursor/default/EN/Help.cur create mode 100644 src/v2/InputTipCursor/default/EN/IBeam.cur create mode 100644 src/v2/InputTipCursor/default/EN/No.cur create mode 100644 src/v2/InputTipCursor/default/EN/Pen.cur create mode 100644 src/v2/InputTipCursor/default/EN/SizeAll.cur create mode 100644 src/v2/InputTipCursor/default/EN/SizeNESW.cur create mode 100644 src/v2/InputTipCursor/default/EN/SizeNS.cur create mode 100644 src/v2/InputTipCursor/default/EN/SizeNWSE.cur create mode 100644 src/v2/InputTipCursor/default/EN/SizeWE.cur create mode 100644 src/v2/InputTipCursor/default/EN/UpArrow.cur create mode 100644 src/v2/InputTipCursor/default/EN/wait.ani diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d8d8f4d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +InputTipCursor +InputTipSymbol diff --git a/README.md b/README.md index 2d475b4..9724811 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ - 默认中文状态为 **红色**,英文状态为 **蓝色**,大写锁定为 **绿色** - 在 [更多已适配的鼠标样式](https://inputtip.pages.dev/download/extra) 中有提供它们的左手镜像版本 - 根据输入法状态在输入光标附近显示不同的 [符号](#关于符号) - - 默认使用 [白名单机制](https://inputtip.pages.dev/FAQ/about-white-list/) + - 默认使用 [白名单机制](https://inputtip.pages.dev/FAQ/white-list/) - 切换不同应用窗口时,自动切换指定的输入法状态(中文/英文/大写锁定) - 快捷键强制切换输入法状态 - 详尽的自定义配置菜单 @@ -321,12 +321,17 @@ - `【自定义】模式` - - 一个万能的模式,需要根据实际情况设置状态码和切换码 - - 详情参考: [关于【自定义】模式](https://inputtip.pages.dev/FAQ/about-input-mode-custom) - - `设置输入法模式` => `自定义` 进行配置: - - [小狼毫(rime)输入法](https://rime.im/download/): 勾选 `切换码规则` 中的 `使用偶数` - - [讯飞输入法](https://srf.xunfei.cn/): 勾选 `状态码规则` 中的 `使用奇数` - - [手心输入法](https://www.xinshuru.com/): 在 `切换码数字`的输入框中填入 `1` + - 一个万能的模式,需要根据实际情况设置状态码(规则)和切换码(规则) + - 详情参考: [关于【自定义】模式](https://inputtip.pages.dev/FAQ/custom-input-mode) + - 可以通过 `设置输入法模式` => `自定义` 使用以下已知可用的配置: + - [小鹤音形](https://flypy.com/download/) + - 经过测试,`v10.11.4` 版本中,在 `切换码数字`的输入框中填入 `257` 即可 + - [小狼毫(rime)输入法](https://rime.im/download/) + - 经过测试,`v0.16.1` 版本中,勾选 `切换码规则` 中的 `使用偶数` 即可 + - [讯飞输入法](https://srf.xunfei.cn/) + - 经过测试,`v3.0` 版本中,勾选 `状态码规则` 中的 `使用奇数` 即可 + - [手心输入法](https://www.xinshuru.com/) + - 经过测试,`v3.1` 版本中,在 `切换码数字`的输入框中填入 `1` 即可 - 兼容性一般,因为获取到的输入法状态可能有误,导致基于此的相关功能都可能有问题。 #### [应用窗口兼容情况](https://inputtip.pages.dev/FAQ/support-app-list) diff --git a/src/v2/CHANGELOG.md b/src/v2/CHANGELOG.md index 66b9dbf..397197d 100644 --- a/src/v2/CHANGELOG.md +++ b/src/v2/CHANGELOG.md @@ -8,13 +8,36 @@ > > 所有代码完成重构 -- 当鼠标悬浮在符号上时,符号立即隐藏 - - 此功能在 `2.28.0` 中由于存在问题被移除,现在重新添加 -- 将 `设置输入法模式` 中的 `讯飞输入法` 和 `手心输入法` 模式合并到 `自定义` 中 - - 现在只有两个模式: `通用` 和 `自定义` -- 在 `自定义` 中,添加了 `状态码规则` 和 `切换码规则` -- 文本符号中所有配置独立,不再依赖方块符号中的配置 - - `2.31.0` 之前的版本,文本符号的透明度、偏移量、边框样式、背景颜色由方块符号中的相同配置决定 +- 新增 + + 1. 当鼠标悬浮在符号上时,符号立即隐藏 + + - 此功能在 `2.28.0` 中由于存在问题被移除,现在重新添加 + + 2. 在 `设置输入法模式` 的 `自定义` 中,添加了 `状态码规则`、`切换码规则` 和 `以哪一种状态作为判断依据` + + 3. 为符号添加了不同状态下符号的独立配置 + +- 变动 + + 1. 将 `设置输入法模式` 中的 `讯飞输入法` 和 `手心输入法` 模式合并到 `自定义` 中 + + - 现在只有两种输入法模式: `通用` 和 `自定义` + + 2. 文本符号中所有配置独立,不再依赖方块符号中的配置 + + - `2.31.0` 之前的版本,文本符号的透明度、偏移量、边框样式、背景颜色由方块符号中的相同配置决定 + + 3. 统一配置项的值的计算,部分之前跟随 `DPI` 缩放的配置项不再跟随 `DPI` 缩放 + + - 这会导致从版本更改后符号可能会变小,你需要重新调整宽高大小 + + 4. 减少了对 powershell 的依赖 + - 现在,如果你不使用以下两个功能,就不会因为 powershell 的任何问题报错 + - `启用 JAB/JetBrains IDE 支持` + - `开机自启动` 中的 `任务计划程序` + - 但是这也导致了 `InputTip.exe` 变大了许多,不过也只有大约 6 MB 左右 + - 其他的修复和优化 ## 2.30.2 diff --git a/src/v2/InputTip.JAB.JetBrains.exe b/src/v2/InputTip.JAB.JetBrains.exe index c168de71bcbc1675c1b6ee5ac48ba50091bda906..384f1d35ee7865ef6f990a97f02317264acd87e2 100644 GIT binary patch delta 69780 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 L2PsAd6yyH@f9r=q literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/Arrow.cur b/src/v2/InputTipCursor/default/CN/Arrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..e5fa9c24b748aa8badaf4a719786a5153d70e87d GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/Cross.cur b/src/v2/InputTipCursor/default/CN/Cross.cur new file mode 100644 index 0000000000000000000000000000000000000000..3e1a21149052abf8cef69dc7ed0ac20109975805 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/Hand.cur b/src/v2/InputTipCursor/default/CN/Hand.cur new file mode 100644 index 0000000000000000000000000000000000000000..0ba3a91f871f44e4eb0359dad227bb43c7cd1c56 GIT binary patch literal 59566 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 V7z7Lg1_6VBLBJqj5a<&K{68qNkRbp7 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/IBeam.cur b/src/v2/InputTipCursor/default/CN/IBeam.cur new file mode 100644 index 0000000000000000000000000000000000000000..1d5a404deccdcbf5b12dedcd89010a5ae16095f0 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/Pen.cur b/src/v2/InputTipCursor/default/CN/Pen.cur new file mode 100644 index 0000000000000000000000000000000000000000..71dec4d13a9829767f4cbfebd5f48e7f307e6309 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/SizeAll.cur b/src/v2/InputTipCursor/default/CN/SizeAll.cur new file mode 100644 index 0000000000000000000000000000000000000000..7faeec9bd5db0efb8f6573ed4db5e717bf72d76d GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/SizeNWSE.cur b/src/v2/InputTipCursor/default/CN/SizeNWSE.cur new file mode 100644 index 0000000000000000000000000000000000000000..6f2088840ea4a050e247951b555b3f13debae158 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/SizeWE.cur b/src/v2/InputTipCursor/default/CN/SizeWE.cur new file mode 100644 index 0000000000000000000000000000000000000000..a9d8e56345495869867dbc03d81d18f52c4ec8d7 GIT binary patch literal 59566 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 NWxz6E894b2{68)*XMF$w literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/UpArrow.cur b/src/v2/InputTipCursor/default/CN/UpArrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..75fafb27ee88ad852d0b7fadbfc35c55b5ec274b GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/CN/Wait.ani b/src/v2/InputTipCursor/default/CN/Wait.ani new file mode 100644 index 0000000000000000000000000000000000000000..b363a278eede70af2e39cc639240bd3b39c3bbc2 GIT binary patch literal 206580 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/AppStarting.ani b/src/v2/InputTipCursor/default/Caps/AppStarting.ani new file mode 100644 index 0000000000000000000000000000000000000000..00248d66948633ff22f8461dbc40ef770fd98bc2 GIT binary patch literal 206580 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 b;ay0IL5fj9m#DOf6oV84{eu)E1B&tg)l~RQ literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/Arrow.cur b/src/v2/InputTipCursor/default/Caps/Arrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..d77afd6f9157294a333965cf9139712846fcddcb GIT binary patch literal 59566 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

`&3^CasGh1QfKO(ZXyre_W6J5 zff$>o{I5xkh1d2&r%$OHbY(xFV?et0vpm}o`xMSmb@TPgJ6+q5&N|Zm+h5%xhu(j2 z>TwW$fa}H|Ku2C5deslQ?N_lcFr)A7>DaByM%vGPexq#3-yc=qfYbSsS>xLIR@lz? z%)0Vo9H8yjvA+oa41GEoonqyUX1_l6)JHF?@A$YpnIs*M66DTfn@^+ZnW<-yH0Ld7G5SJkjv!wC*(Z9kq}5{%<2F_?@_<`u&3SXUa$n7z?6d7W3G$%5Pym|EG|N_V3hx6y0O$lVo0gPtToR+r2$G z`|%HM*q(|0kMYm3Ki+p{lC(Dxw|uk(clsy39U7S@?mqtW3q3hTGY=; zHOiZ;|6?BJ3E1!D^-nbW6aUr~aAFK|r;ql2A-mpv#t|5F!7-k5Cyoi@VHVP!Ql^Fl9c@zo1XxK zIY;Bw{Kt{@BgRJJ-qileH~!GbwnTQ8z4lmAw%a%3{{%jtSK~hIH=fwfZ&GjlRu069~W5RfF$KQV^U*G+q`sO{qd(Umg$q^4+nv~CLo`Kl|Zi23v zxc}j~{aR2gvt+D;5;Kj;5xe}R3iH}ii-*wz#-E2<9pM;7o| zpiKKbL^Mil0}b~-?EjeXO47PFWm{9{msakF?WaMH=C++c(0_=ekpjDZ+-#T~X24M#{-tc-n50*(MZ9m7Ed4Vat7i7%- zr8D>W$MvX&oR(_q(ZHeodJNFsKdSJeOxVxytgl<{NXTkwe~*Si!x+HV`=~0f?N|OD zviKaQ_IG05niBP)PiBj3yKmfY?KjnzyU*i(g?~)6}eD{RNH`@f3a?mBZY=$PFb zvGAeb68r}dgnw5&hq?IceK`IvYIh_C#6gq0p7k+zezV;Q5x_k-=SLy@C5E~oSBE$D zxPeDW+H<`Xy%pEBsA;Zg1XlH2*Qnobr~(JLU#yC$g4?<8{9{C|w{jnh^tzV&U>LdP zVG4+`R$}#kNfKW>>Vj{$e8k!p-j7@d!pHSG6yDeC_Tl~Fh;>ClAU=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6 zAYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~ V3<3rLgMdN6AYc$M2($_W{vQYR+c^LL literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/IBeam.cur b/src/v2/InputTipCursor/default/Caps/IBeam.cur new file mode 100644 index 0000000000000000000000000000000000000000..dce95057e1c81935b8bddbc089ae0056ecf7faa6 GIT binary patch literal 59566 zcmeI5+iw(A9LLXYcc!HUOR+5#C?%L+D-_Db8*ORDQn011FEsIm5FgN}G2sF67TcgU z6fcn|(gHyr)Chlt4}|z&qCA=S)QAzo6N!;f(2n2lT$bt5U63%tIDXIOH|NYbXZM`n z=UnFOZ_e%*lQm^##R_Ap@oI+us4=Fk&6s+;ns*qp8*$y;#w^FHdDNJ(7mR5}9z>gN zNX88zu)>(L_j!UdxjQFNhPPTF;dxvxhk_a)s~~J<`aEZR9Bv*8X@_hN$!3HZABUS~ zz1nf!K0fFKV(oAL5e3Ipel93C?4$g+_#5j$$9Lhf!Q)&U;6r6phRa8MWhgCGMS(3Ia~xu68-j<)+!fxI2}(J}W3IYKm>pW{m<;;++ysH`$ov!K0a_Qe;;ddaK=9MjAMP;cg5^`Jg$3*{|?hG zY=qo#M!!Z*-iC-zxP9zwCW#yhZFzk z8J8+S{7cb^K27|iXI!cT@h?Ru`ZV#6o^h!X#J?1s=+neMdd8(n5dTtiqE5@0)k_+0 z`u=se_anF9WPksnU7^A>EouqX|C;;#{k^9?L0UGk_7l&hX_+ds*woE$wDbY7%L`^~a?(-aA&zeh3||n2itALWkrz-~MS$433qbf&F%J z;1Af~rd@#z4z}BA+HlQtn|V(rd2a7U&;I;I`)=B8%TEu7?B~Odjq|d1w*FxJe92P) z)H+&7N`l2*<;SFZpl+ z=gr&ENO?p+1R^64`pHf{c)5$gscIg-b&sRv4132f+?ZKMH}=9zMjUO1kkSE66f z+o|nh*3)xSO+l!b9~pRkun35N2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fC$_L0{ow#ZpbJk|35)E(es1=L{0=m;9d~mPV8cGFX|IlnbeuT zZ{h#x@HYYcUze~jj%m#E-`}kcB|?t+P&fWp)*?tfgwH<<3*(r^Jj|OW25eL6wG{F& zWIbe4fiR9~%)`8VPa0g%_H0|~*9qx?^cD!?Iv~u$ylLqJ)SqLU{hMt}J^LX21;RL{ zF%R?dJ!u#NdHu6%>R-0Tw_VEre^uytOpLP*ZM&3RUH?)F^=DsR1l@lxrh5<%1{awZ zl9v7tRouC(D$wy(KJuq&{-gfx9C$0egLLFiQ`=L2x(xdNuYr!meDwbd%CZGjPb%AA`m6ob|26(K|J`^Fc$kIee_j7{ z{dcdCTK}LUq|C8Rwf@!mU*CTU?0&%-0OLd7|GYUu^MA@Ff2gDRU)Mif|8@P>^7mVE@;a68dj}?y2AZRYLzB_78~mf2C{x8|O3a|C(dX zJJ(nMt2E7jP)GZ}$N>AlF3i>5;W+I7`o-r(ZmDwE|J9HEUq$!8kq`ENJ)J70rHlxO zfCz|y2#A0Ph(O{96nj2KD1NHTJMkV9;y9+vJNNw=lX1_B`GxuY$BhJ!9ZA1`w|IGv zLh;z&wPWHsq$(r=A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`H zAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L`HAOa#F0wN#+A|L|)Qv&}0 D=_IcR literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/No.cur b/src/v2/InputTipCursor/default/Caps/No.cur new file mode 100644 index 0000000000000000000000000000000000000000..5d9e3dd478ce92831b205fa0f4a2716f0fcd340a GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/Pen.cur b/src/v2/InputTipCursor/default/Caps/Pen.cur new file mode 100644 index 0000000000000000000000000000000000000000..8ed875adc7a4fbbe04344c2cb840d334c50c2938 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/SizeAll.cur b/src/v2/InputTipCursor/default/Caps/SizeAll.cur new file mode 100644 index 0000000000000000000000000000000000000000..c94460bc86f1b30d8184cef7402bccfaf2164bf4 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/SizeNESW.cur b/src/v2/InputTipCursor/default/Caps/SizeNESW.cur new file mode 100644 index 0000000000000000000000000000000000000000..4470e0cc359d27634cc40713d961f20fdf6af0b9 GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/SizeNS.cur b/src/v2/InputTipCursor/default/Caps/SizeNS.cur new file mode 100644 index 0000000000000000000000000000000000000000..cfbf90c7bf253f7a3e262fe4fbc1f60385eb7452 GIT binary patch literal 59566 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 D#dEOP literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/SizeNWSE.cur b/src/v2/InputTipCursor/default/Caps/SizeNWSE.cur new file mode 100644 index 0000000000000000000000000000000000000000..3db647967d3256dbcd67af769d6c419ecf25d552 GIT binary patch literal 59566 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 I$DV=z2OXxkcK`qY literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/SizeWE.cur b/src/v2/InputTipCursor/default/Caps/SizeWE.cur new file mode 100644 index 0000000000000000000000000000000000000000..b13339d639257288ee63c7fa7b52ce18c2dae4a2 GIT binary patch literal 59566 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 a7%&VN1`Gp+0mFb{z%XDKFbte|2L2z-?y(~P literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/UpArrow.cur b/src/v2/InputTipCursor/default/Caps/UpArrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..f36c24abf0558e3c57e492e2cbf667eca3a94430 GIT binary patch literal 59566 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 L&46a$(lhY?Xn97W literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/Caps/Wait.ani b/src/v2/InputTipCursor/default/Caps/Wait.ani new file mode 100644 index 0000000000000000000000000000000000000000..48e44172c9403175a04f0945667aa176f0b644cc GIT binary patch literal 206580 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/Cross.cur b/src/v2/InputTipCursor/default/EN/Cross.cur new file mode 100644 index 0000000000000000000000000000000000000000..af1c35a6c8571c91c1093a87832aac016e42b8df GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/No.cur b/src/v2/InputTipCursor/default/EN/No.cur new file mode 100644 index 0000000000000000000000000000000000000000..5d9e3dd478ce92831b205fa0f4a2716f0fcd340a GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/Pen.cur b/src/v2/InputTipCursor/default/EN/Pen.cur new file mode 100644 index 0000000000000000000000000000000000000000..6758b57cdc689263af31fac95255868fed8711cb GIT binary patch literal 30894 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 UB`T1T0qIUzPV4gdaTxyo4}{g$D*ylh literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/SizeAll.cur b/src/v2/InputTipCursor/default/EN/SizeAll.cur new file mode 100644 index 0000000000000000000000000000000000000000..2bf91e0ed453177192c06964f35aeb328b87ab3f GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/SizeNESW.cur b/src/v2/InputTipCursor/default/EN/SizeNESW.cur new file mode 100644 index 0000000000000000000000000000000000000000..5d5b85cd0473398b638fe2e3969f9d1c5590f9ac GIT binary patch literal 59566 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 literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/SizeNS.cur b/src/v2/InputTipCursor/default/EN/SizeNS.cur new file mode 100644 index 0000000000000000000000000000000000000000..32f22f71425a863474769064c0658f93a6b833c9 GIT binary patch literal 59566 zcmeI5dyo~?oyU6ym^(8J3=k0phM8d=Fo-hXpnyCEnHgRI24Mi7YyMCd6Qe6J70NON zRqG?0#MS7sCZ*ZhvNoHIO3NtO) zV+$8LPL2MWw>r-K8y%-vd34xWC@Jz%O4K>di^HR$|FYeRRM1GV(unz=eW5mVV{5P^ zA}N;)^@TLYIA`!EnU@W_gCwOAvFD7IR7>h44Ze`(80W}CUdrUk2fma@DkbA3lO;1G zvnBH+^L-)BG0u^Pyp*9VIQL4?k_hqJVGAjo#~gMEIKm9U~G?7*^5U*(}#2i1e|ef0RUvQBY+BuJ-w{q?T)w=6Kl$I-kObMkK>cZO+{f2Fw#`O5{#-y> z?clI%2l?;Seut&4zm z59jiGO%ApVh9b>JYJSk#`b0YI0=}M_GiQ6<(4h@dkgS~>y_xQd)HdrhpS$DV=Fk6y z`m%QqD@GC09Mjl+yXFtIdA6H~6Q7I_Q;7LLpZ+G=wf`4@0rx+Txlx{l-aJIxYGjw@Yv~I45z3UFsSOzQumI2Fv zWxz6E8L$jk1`5tVvn=RQ0_RJT*mD9)^YWa4G^X6*?;FLZQx-gj8NkUsFV;&C)^g&- z95?sHbo!ibhF9=_lV<{0i#E?rupSaG<~VuCOBv$}x(0H?9(;1&9y}G25faw0Sl8z{ zhZ+g@JQ30y;~aU&OBu?d16_soA)ar88-7O%#DrlbB~2A2B^T)g&nC1;cxEGBS~#aX zQ^>2uqH4-Y&|&;2WPKRUsrzBR?V7Q|JaovAY5E_TDdE|Z_K}gulJVu`%Mj8W^UslI z8f7S}GH_SOVWdc9{IuDQl_ufE!KH*9d-_3NWTnq!>P8r3IVU8hv$w|aKw+vt!?LnpeiA;DHY z>cQ~tVUIXYz4Q{_GdI@PZ+>_A^8Ke+r(xYpSo_wl?bTXJKhLLVjjg|5#}LvS^Uf)c z=a@de{WNB^A>cX+qYqS$fX_(@6_i=>76K!rdAFbv`A~gJ5H=!8|72jdcmaq z8S8@JUb7}DQ6J*hqEDAmot%`e=jYDdF;u!`>muKWkxFAbn|c5{LVK$8>vi&kva*%0 zcXaG?ue&bFx7MWkldY41_o}O0_tsmZLi%hUT*}7Q0j2Yej*h*PDk{2UbFy!f_5cQh zN6EA{@>6#e3LN_FCasgMdUNsO{a`0f&fq%U2ZOV_+jZZ1D=MVPW6s6r_tSmr*7c(M zttCtLk0~ixiA~=&<3y%$L_Zu+!3)MjA`>eH51zMo@!~g#b3Jc!DiAwZXsat$xbD+W zpI!|i%`wg;!ETPJeVoLHH#$3CA1Rv`Mk4iK0E+}n>24nPBTGvss6g}c^XC23;~kDd z?0fiDu5?|VyEt*eb^H3FLYiZoOW}i8xAFm-*!D4)I!Fh9jC*CSzD?`Qv{lvbne8*t z4{)to<+?ZB%`Z1L-U)^b>VUYXy$>B-UOra+ z&82_T8m`xGhpqV&*TndZH@a?5&*`{HOmU7p4!KJtAG=K6yW5>HsXOSG(?=ce?H~&$#YSeiD_Zo^oBp{LeY^kT(Rs z*DuK?w*UUpOBowR&8w-QKTXw+iyGBdYAP$qd(oani(dA|rc`YfKa39@9j@EinOr!R z0=sEn>Q_%;dry1&OTsb*Okh(wl>gSMDxPVrxNFj+u0MBmo#U_@ z_w#wSZ@9sIqP6uNFzLBnxD6VQJ^Z@BAWzlyIdh)v7mu;=F zXZtjtU@QV#D*UCBBaym~R<8U%zn{(wKXbO{o=faGU3dHT=$t46{PMLQ48roiwZbIq zVe>gJev~KDHfBuSF+Hb5+$No$1z~_+Vg}wBd)fN?qv-<&qUSQG1JAZF=o;uCn7}4U z#eYdhRaH%1@PnNVU+@XvvcwN2VP`JN{2-_g;@prKWo6?&?&|t5tN5X<5-W)tV;ARw z>Mr^5So}1XmvisJ;8!x~hF^?v7wqfo+?!SVga2*r(*8eIdlF+*oOMpLhbkYpRsvF*L%-gamB4*F_=iFu@xy+iK7vJ zTE6^EZ$5w@L9q({0$jhy_C8@4?qkX1`q$Be(Ox^a_mWH29gnub@N1YnUO%e+_Z^kZ zZ%&=M7Oo8z(wS_;obngFbmf(gbNwzJ2JHI%#VfCT0<1oUOkl_Inzmf4IMR1ye&b&c zoCu5~;){C7^8ShD`zPS(on^~*wNzG)pdSH43{VycQ+N8VV#EGr%l6=dVm)|FF#SC3 zA%pu@o=)i&PkZaNJ^)l>I}6xn6hRLiYJF*G&D%?syx_%>a56rsF3z4`;{$V@6!#A) z>*>&SB0Aq*y!eG_m6a1Qo-gdi5$dtHsK}{Ry}sJf@qOK&>G%32wKZX&KF;(59|G>* zDo((Cigt<)?)B{M?0if&J4e7%t}$aUC+_1pxp&&MmG6J?i@!TToG{PeI$!ri;ZxGD zcsPCkoNMu@^m+H!;9F&mtLz6WR=n}hv}qf#1@?FwiT3mHzbi9{udDpmZEZL2Te9S5 zx<=~t{NUP=Yem{Ib%2oO80Umrc~9+CnP0WF-6TC+6FLccef5RgQOAQ6PySY>HGxZa zELd>Mb93iD`BrD=tAAd#>VHn?x(OkzdBASYk%zo0$F-CiR#Cy?#m5%5D{?hojq}6g z9kQjiwscQxYdJz%C%id{$v_#(>i-xC=G-~h7kTq5jdx*SIA`*mC%Df6Ro0|sAb$+# zi~hBmCwX7taeMWp9v#p!vJR+kGoM@O^wmSF`StV3w~3%(T5Z1(T5Z1(T5W`%x6nf|4Gs}My>ae-U+s%Em4H- zLhnNIAJy%-?p|H|>l?+6Gs|@kI!>4FNNp|Jse5aiYqq$q`;cx;1#MDkH_L!!z%pPN zunbrRECZGS%YbFTGGH073|Iy%1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X z0n5O7%RsY`EtG7P6ghSJ)V6iNekaH?7x2O3eqj<&>~niK(N~^Z50k|FpGU{zeZW_~ zv%xc|JgbWEeL0@9jTerY^W>!rW#e_}-}8DiSdGv4gO5C?>wW)Qdwx%6xP;%}h!>7= zj^9)uFJ&l;jzlhW=)BtE{ig1yOYrlZas1+Y`~2R;7zy8(I$r_66zB_uGH_{bZ?k2;l78aPyeaDWAU2a zfAN8S>*}C>|K$`ynq!WJ2gY|3@ATheBy|#EmAIWP zS@4CDlGS>@$KSou-u{lhBYNg{n1a4<8F!pAzg@KG_q@MvR7pt}IwkOc4Q$m(unmSX z3785Q2Z_G(TYbc0y@YzXOfpaJZCm%ZEiK#io|9vt-v^BIHB~-zJ=oIn%-GUWVq%_e z3!B)kl7OX<92nn;GwfgwyTm*F)U3fpMT_+Qoo(5?doY#%=KPU0YmRT7I`zqt;^Gc$ z`nJIk&jA?o83*`|pqI8ryixDiZIR4ws;IbLzr**Q!CC12?>ai(Ypkfa4%2GLr#2xiMTkku%r;v3X#3k=YmA@70h7IWurW? zMBl=AL!VnGq3zB3QeEA*(s{>ckPqIwFhkyl8CcHmJM_D1eScYB{~%a=Om*6W5v=*> z5AmP4r_D3wGVV-~Ty{%+{dZI03q7Ca`#3{&hzG`rnDU<50e!Jcgln7U`a zNlckGKjW(LSLxKU_8uZEHHI%`h2cG8}&}Tr8&*%65D(b2PxhSoQeaD#YZ$x>;$s}?3s=Q z#(&1p;S#RFr|7!m$Ej?Go=?{1gE+{sFZgat%a6e9W5#EsYQ=~`w%PIaG6 zTgjmeSivm(^x2uV0sLp&D9a49{{_A`4GOOI~Txz+J1$E z`Q)VC?d|_rD4d1Tt83>s!S4HjFZhISVH@X}FVJ3?KU9q=EuEXq^?RZGN>?wK!Hy5U zFZiEoE)?&-*Y{mhQ*&3kHqWnBXuB%kTO)9nL||MdM_OIGW**#GH#^DA9E8nd3n z2j3TbO1J)v{}cXw!Giq1-+kjo*M0eA*FAbPDx^7<=YI6(^XI=HpIKj^F0=AqzqR~+ zUUA)VhwC0beD=tH@L=9K;N9#w`d_Vkvj_6(|L)yq`)-a92YHME{l3qq@;{sSr~mi* zKi!``nNLh!%o~3b_eYN8)qnjy-U<1UP5&1g{|3~5`hz^yzwdu0CS(Q|FQY6-s6$q{*QkC(4o^ln-qOwp2q<7e?4+2oB1!-%ii^m z#=qa>GbTM<_(>d?@sB={aUqYfk1maWJLN|<*FVe?7%zuw{`13p;~FS^n*ThG556y{ z=03{iZDtNgA29UVnwpIRg*V@Jw2pc+K1kA;`+Ls&A8tOeNz?V$7SPbZ1 zQmxirkLDX=q4eqg*AXzwVd6L4elHn6u^4!G`t-+g!aIQXKlQA@HaU|^-5V}U3=Glz z?Je`#%QpVq(V^Ub~9eE1K4=%F7Oto6@}wf=c9Ck~SJ1v##H z5ckc)hD`^fk2PPuOP#kF4u-6)uD(X=-{HU69yXUx>587_8@CZch2$z_2)=FUVodn|j~a(C}3OD^$!I zpA+{n4%8N|rtRev3t=1uoYOk*Aw7pe%n!8hh6^}A2I;wrsos0J0uSbM;WjCNH^$S+M~Lk_)FcF{KKbRU7zax!Y2{Z9OE2$wB~v}WfFWoAL2aG&s6`L zc!=KSz-$yV#4T9`@qRGaw#4 z#kHq-HoTj9pnz8|%BXB!#jrbFkJ10q{KUH5ECZGS%YbFTGGH073|Iy%1C{~HfMvik zU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318z%pPNunbrRECZGS%YbFTGGH073|Iy% s1C{~HfMvikU>UFsSOzQumI2FvWxz6E8L$jk1}p=X0n318;M_Ct|DsN3O8@`> literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/SizeNWSE.cur b/src/v2/InputTipCursor/default/EN/SizeNWSE.cur new file mode 100644 index 0000000000000000000000000000000000000000..c8762c2cf75e213dd03b8be9b3d9c5c7173465ee GIT binary patch literal 59566 zcmeI53v^Z0na588tjai zqdvyEbY{(RjXF!E=&aQ`(^jRvsz?=djRmPrwA1C=A`bycvgiLh_v~=Ex%cMYo11`Z z?UVK8oO{mR-}nFi``h2%=W*}xyj-t`S6=RU#rmt(`gG6p#*g>B6ZKa;-}C-X`)1AZ zyi)yDH+tR;Ydo)7WwhIyCCTx(v{CMP&-aarK4rS(sG^lzZ6o$G>#kbRjjf)Nh@?=` zI}o*#6bD zX+G zXN}pl%b54yZx^G#sIA?E?!ZPo`|#3tcwynJw0Zy0kBm8Rz_cxIz17Y>eMfzBCN?DT z+JJmD;PR@f8`JXL_Qx;=c(D6J>q{#uufv7}Td@nVdBT&^r@s)dZc6(s2HGNI*KR9E zJ&z3uwqh6d4cs|@{=2q(()A5D81u;|QMvy5Blf^RJjAiDJo&%akR-Byg7Rr^}8_eX^a%f4}{^(muLnKT-Sp@xN=qg82O3e6ul)jYs^v@kV1l{WQuyZIOci zJLb=SNA?rNzu*5Af6v6#MNAz$Xv~j)oRY10Iuw6T%RV_KUjJubFXjAe$r z3>v$y!A1i6+U@0*78X`3|Fj=x$!m7W00TOef0#$a%RSg;@j3X{(@uM^9S7u8Fpyhl ziv)eFUA-VK?wdIA0qIZXyAJ>i!da#RCt^GieJrm)}b}VcTNJ(R`%z-rCyx z*eTq?pZT4yGzC!bd zvMk$;#feW=h$+N=&ZfVycHQSLV8HAyHfD1VV?58adftX+&zpJB^U8MX{IN;r)W~Md z*HRVABh*I^`p}Dh-wyUdi{}={fMdWh;23ZWI0hU8jseGjW56-s7;p?Y2D+SqYFW^u z1l~oGw&w)qXXQBoY3y(bUpESGcUbWl762#LytrS2a4#n;cE7zYro+c{vAlu@oIDf2 zy=eRF1ouP2V)s*qvedD@psPC$SKG7=exMWGUC|a` zCtl%+=U;}((CB_q+++2*?i=Ohm)u-abIYSsru^pB`uaCNSiJb71520gN7!Z`$0$Qt z>PW^)M-95rDM2?ju$8TNvb=MDaDbGT1u+8Ob+^~l-27r)-AkV=S<-ASxWJfm&o$

T=nVZld8HY}EV?%KMW{`}|`n$ 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 A(EtDd literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/SizeWE.cur b/src/v2/InputTipCursor/default/EN/SizeWE.cur new file mode 100644 index 0000000000000000000000000000000000000000..b9ba90bb978b610db345bd75c02d9d68f706bc42 GIT binary patch literal 59566 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 L%YbFz)HCq^4^C%& literal 0 HcmV?d00001 diff --git a/src/v2/InputTipCursor/default/EN/UpArrow.cur b/src/v2/InputTipCursor/default/EN/UpArrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..30b84e6b0a0bec76c321976c2fa2e0b3da1e7cf0 GIT binary patch literal 59566 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 NpaRFz?p0Ha{|DYxO(XyS literal 0 HcmV?d00001 diff --git a/src/v2/menu/JAB.ahk b/src/v2/menu/JAB.ahk index 8f1e501..9c764c8 100644 --- a/src/v2/menu/JAB.ahk +++ b/src/v2/menu/JAB.ahk @@ -1,11 +1,11 @@ fn_JAB(item, *) { - global enableJetBrainsSupport := !enableJetBrainsSupport - writeIni("enableJetBrainsSupport", enableJetBrainsSupport) + global enableJABSupport := !enableJABSupport + writeIni("enableJABSupport", enableJABSupport) A_TrayMenu.ToggleCheck(item) - if (enableJetBrainsSupport) { - FileInstall("InputTip.JAB.JetBrains.exe", "InputTip.JAB.JetBrains.exe", 1) - waitFileInstall("InputTip.JAB.JetBrains.exe", 0) - + if (enableJABSupport) { + if (runJAB()) { + return + } createGui(JABGui).Show() JABGui(info) { g := createGuiOpt("InputTip - 启用 JAB/JetBrains IDE 支持") @@ -30,7 +30,6 @@ fn_JAB(item, *) { gc.w.enableJABGui := g return g } - runJetBrains() } else { if (gc.w.enableJABGui) { gc.w.enableJABGui.Destroy() @@ -42,6 +41,8 @@ fn_JAB(item, *) { RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") if (A_IsAdmin) { Run('schtasks /delete /tn "abgox.InputTip.JAB.JetBrains" /f', , "Hide") + } + if (A_IsCompiled) { try { FileDelete("InputTip.JAB.JetBrains.exe") } diff --git a/src/v2/menu/app-offset.ahk b/src/v2/menu/app-offset.ahk index 75dc239..9fdf52c 100644 --- a/src/v2/menu/app-offset.ahk +++ b/src/v2/menu/app-offset.ahk @@ -22,7 +22,7 @@ fn_app_offset(*) { gc.appOffsetGui_LV_rm_title.Text := "特殊偏移量列表 ( " gc.appOffsetGui_LV_rm.GetCount() " 个 )" writeIni("app_offset", "") global app_offset := {} - restartJetBrains() + restartJAB() } addClickFn(LV, RowNumber, tipList) { @@ -144,7 +144,7 @@ fn_app_offset(*) { _app_offset .= ":" SubStr(_info, 1, StrLen(_info) - 1) } writeIni("app_offset", SubStr(_app_offset, 2)) - restartJetBrains() + restartJAB() } global app_offset diff --git a/src/v2/menu/bw-list.ahk b/src/v2/menu/bw-list.ahk index 790fa6c..2366996 100644 --- a/src/v2/menu/bw-list.ahk +++ b/src/v2/menu/bw-list.ahk @@ -55,7 +55,7 @@ fn_bw_list(*) { value := item.value - 1 writeIni("useWhiteList", value) global useWhiteList := value - restartJetBrains() + restartJAB() } } g.AddEdit("xs Disabled", "如果使用「黑」名单,你需要承担未知的可能存在的窗口兼容性代价") @@ -90,7 +90,7 @@ fn_bw_list(*) { fn(value) { global app_hide_state := ":" value ":" gc.blackListGui_LV_rm_title.Text := "符号显示黑名单 ( " gc.blackListGui_LV_rm.GetCount() " 个 )" - restartJetBrains() + restartJAB() } } gc.w.bwListGui := g diff --git a/src/v2/menu/config.ahk b/src/v2/menu/config.ahk index 28f998e..c423e8c 100644 --- a/src/v2/menu/config.ahk +++ b/src/v2/menu/config.ahk @@ -7,16 +7,26 @@ fn_config(*) { gc.w.subGui := "" } } + if (gc.tab) { + getDirTimer() + } else { + SetTimer(getDirTimer, -1) + } line := "-------------------------------------------------------------------------------------------------------------" createGui(changeConfigGui).Show() changeConfigGui(info) { g := createGuiOpt("InputTip - 更改配置") ; tab := g.AddTab3("-Wrap 0x100", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号"]) tab := g.AddTab3("-Wrap", ["显示形式", "鼠标样式", "图片符号", "方块符号", "文本符号", "其他杂项"]) + tab.OnEvent("Change", e_tab) + e_tab(item, *) { + gc.tab := item.Value + } + if (gc.tab) { + tab.Value := gc.tab + } tab.UseTab(1) - g.AddLink("Section cRed", '你首先应该查看相关的说明文档: 官网 Github Gitee 一些常见的使用问题') - g.AddText("xs", line) - g.AddText("xs cGray", "所有的配置项修改会实时生效,可以立即看到最新效果,但是更改时不要太快`n比如需要输入值的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要放缓输入速度`n") + g.AddLink("Section cRed", '你首先应该查看相关的说明文档: 官网 Github Gitee 一些常见的使用问题 ') if (info.i) { return g @@ -24,6 +34,8 @@ fn_config(*) { w := info.w bw := w - g.MarginX * 2 + g.AddText("xs", line) + g.AddText("xs cGray", "所有的配置项修改会实时生效,可以立即看到最新效果,但是更改时速度不要太快`n比如需要输入值的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要放缓输入速度`n") g.AddText("xs", "1. 要不要同步修改鼠标样式: ") _ := g.AddDropDownList("w" bw / 2 " yp AltSubmit Choose" changeCursor + 1, ["【否】不要修改鼠标样式,保持原本的鼠标样式", "【是】需要修改鼠标样式,随输入法状态而变化"]) g.AddText("xs cGray", "推荐设置为【是】,它与符号一起配合使用才是最完美的输入法状态提示方案") @@ -75,7 +87,7 @@ fn_config(*) { global changeCursor := 1 reloadCursor() } - restartJetBrains() + restartJAB() } g.addText("xs", "2. 在输入光标附近显示什么类型的符号: ") @@ -84,6 +96,7 @@ fn_config(*) { writeIni("symbolType", item.value - 1) global symbolType := item.value - 1 updateSymbol() + reloadSymbol() if (symbolType) { gc._focusSymbol.Focus() } @@ -113,7 +126,7 @@ fn_config(*) { writeIni("HideSymbolDelay", value) global HideSymbolDelay := value updateDelay() - restartJetBrains() + restartJAB() } g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "单位: 毫秒,默认为 0 毫秒,表示不隐藏符号。`n当不为 0 时,此值不能小于 150,若小于 150,则使用 150。建议 500 以上。`n符号隐藏后,下次键盘操作或点击鼠标左键会再次显示符号") g.AddText("xs", "4. 每多少") @@ -133,7 +146,7 @@ fn_config(*) { } writeIni("delay", value) global delay := value - restartJetBrains() + restartJAB() } ; g.AddUpDown("Range1-500", delay) @@ -145,12 +158,15 @@ fn_config(*) { g.AddLink("yp", '的相关说明: 官网 Github Gitee') g.AddText("xs", line) g.AddText("xs Section cGray", "可以点击「下载鼠标样式扩展包」去下载已经适配的鼠标样式") - g.AddText("cRed", "如果列表中显示的鼠标样式文件夹路径不是最新的,请重新打开这个配置界面") + g.AddText("xs cGray", "如果要自定义鼠标样式文件夹,请先查看相关链接,然后模仿默认的鼠标样式文件夹去尝试自定义") + g.AddText("xs", line) + g.AddText("cRed", "如果列表中显示的鼠标样式文件夹路径不是最新的,请点击左下角的「刷新此界面」") + g.AddText("xs cGray", "InputTip 会使用下方选择的鼠标样式文件夹中的鼠标样式文件,根据不同输入法状态加载对应的鼠标样式") + g.AddText("Section", "选择鼠标样式文件夹路径:") dirList := StrSplit(cursorDir, ":") if (dirList.Length = 0) { dirList := getCursorDir() } - g.AddText("Section", "选择鼠标样式文件夹路径,InputTip 会使用其中的鼠标样式文件,根据不同输入法状态加载对应的鼠标样式") for i, v in ["CN", "EN", "Caps"] { g.AddText("xs", i ".") g.AddText("yp cRed", stateMap.%v%) @@ -168,7 +184,8 @@ fn_config(*) { updateCursor() reloadCursor() } - g.AddButton("xs w" bw, "下载鼠标样式扩展包").OnEvent("Click", e_cursor_package) + g.AddButton("xs w" bw / 2, "刷新此界面").OnEvent("Click", fn_config) + g.AddButton("yp w" bw / 2, "下载鼠标样式扩展包").OnEvent("Click", e_cursor_package) e_cursor_package(*) { if (gc.w.subGui) { gc.w.subGui.Destroy() @@ -176,10 +193,11 @@ fn_config(*) { } g := createGuiOpt("下载鼠标样式扩展包") g.AddText("Center h30", "从以下任意可用地址中下载鼠标样式扩展包:") - g.AddLink("xs", 'https://inputtip.pages.dev/download/extra') - g.AddLink("xs", 'https://github.com/abgox/InputTip/releases/tag/extra') - g.AddLink("xs", 'https://gitee.com/abgox/InputTip/releases/tag/extra') + g.AddLink("xs", '官网: https://inputtip.pages.dev/download/extra') + g.AddLink("xs", 'Github: https://github.com/abgox/InputTip/releases/tag/extra') + g.AddLink("xs", 'Gitee: https://gitee.com/abgox/InputTip/releases/tag/extra') g.AddText(, "其中的鼠标样式已经完成适配,解压到 InputTipCursor 目录中即可使用") + g.AddText() g.Show() gc.w.subGui := g } @@ -220,12 +238,14 @@ fn_config(*) { e_pic_config(item, *) { writeIni(item._config, returnNumber(item.value)) updateSymbol() - restartJetBrains() + reloadSymbol() + restartJAB() } fn_setIsolateConfig(item, *) { writeIni(item._config, item.value - 1) updateSymbol() + reloadSymbol() } fn_writeIsolateConfig(item, *) { if (InStr(item._config, "color")) { @@ -235,7 +255,8 @@ fn_config(*) { } if (item._update) { updateSymbol() - restartJetBrains() + reloadSymbol() + restartJAB() } } @@ -305,12 +326,12 @@ fn_config(*) { } } + g.AddText("xs Section cRed", "如果列表中显示的图片符号路径不是最新的,请点击左下角的「刷新此界面」") + g.AddText(, "选择图片符号的文件路径: ") dirList := StrSplit(picDir, ":") if (dirList.Length = 0) { dirList := getPicDir() } - g.AddText("xs Section cRed", "如果列表中显示的图片符号路径不是最新的,请重新打开这个配置界面") - g.AddText(, "选择图片符号的文件路径: ") for i, v in ["CN", "EN", "Caps"] { __ := g.AddText("xs", i ".") _ := g.AddText("yp cRed", stateMap.%v%) @@ -329,6 +350,7 @@ fn_config(*) { e_pic_path(item, *) { writeIni(item._config, item.Text) updateSymbol() + reloadSymbol() if (symbolType = 1) { gc._focusSymbolPic.Focus() } @@ -340,7 +362,8 @@ fn_config(*) { _.Text := "" } } - g.AddButton("xs w" bw, "下载图片符号扩展包").OnEvent("Click", e_pic_package) + g.AddButton("xs w" bw / 2, "刷新此界面").OnEvent("Click", fn_config) + g.AddButton("yp w" bw / 2, "下载图片符号扩展包").OnEvent("Click", e_pic_package) e_pic_package(*) { if (gc.w.subGui) { gc.w.subGui.Destroy() @@ -348,10 +371,11 @@ fn_config(*) { } g := createGuiOpt("下载图片符号扩展包") g.AddText("Center h30", "从以下任意可用地址中下载图片符号扩展包:") - g.AddLink("xs", 'https://inputtip.pages.dev/download/extra') - g.AddLink("xs", 'https://github.com/abgox/InputTip/releases/tag/extra') - g.AddLink("xs", 'https://gitee.com/abgox/InputTip/releases/tag/extra') - g.AddText(, "将其中的图片解压到 InputTipSymbol 目录中即可使用") + g.AddLink("xs", '官网: https://inputtip.pages.dev/download/extra') + g.AddLink("xs", 'Github: https://github.com/abgox/InputTip/releases/tag/extra') + g.AddLink("xs", 'Gitee: https://gitee.com/abgox/InputTip/releases/tag/extra') + g.AddText(, "只要将其中的图片放到 InputTipSymbol 这个目录下就可以使用了") + g.AddText() g.Show() gc.w.subGui := g } @@ -409,6 +433,7 @@ fn_config(*) { e_color_config(item, *) { writeIni(item._config, item.Text) updateSymbol() + reloadSymbol() } for v in symbolBlockConfig { g.AddText("xs", v.tip ": ") @@ -429,11 +454,13 @@ fn_config(*) { } writeIni(item._config, returnNumber(value)) updateSymbol() + reloadSymbol() } fn_border_config(item, *) { writeIni(item._config, item.value - 1) updateSymbol() + reloadSymbol() if (symbolType) { item._focus.Focus() } @@ -622,6 +649,7 @@ fn_config(*) { } writeIni(item._config, value) updateSymbol() + reloadSymbol() } g.AddText("xs", "文本符号的边框样式: ") @@ -634,7 +662,6 @@ fn_config(*) { _._focus.OnEvent("Focus", fn_clear) _._focus.OnEvent("LoseFocus", fn_clear) - g.AddText() g.AddText("xs", "是否启用") g.AddText("yp cRed", "文本符号") g.AddText("yp", "的独立配置: ") @@ -797,6 +824,7 @@ fn_config(*) { g.OnEvent("Close", e_close) e_close(*) { g.Destroy() + gc.tab := 0 gc.timer := 0 try { gc.w.subGui.Destroy() @@ -806,5 +834,4 @@ fn_config(*) { gc.w.configGui := g return g } - SetTimer(getDirTimer, -1) } diff --git a/src/v2/menu/cursor-mode.ahk b/src/v2/menu/cursor-mode.ahk index 188e2b5..e5995c4 100644 --- a/src/v2/menu/cursor-mode.ahk +++ b/src/v2/menu/cursor-mode.ahk @@ -199,7 +199,7 @@ fn_cursor_mode(*) { } } - g.AddButton("xs w" w / 3, "刷新应用进程列表").OnEvent("Click", e_refresh) + g.AddButton("xs w" w / 3, "刷新此界面").OnEvent("Click", e_refresh) e_refresh(*) { fn_close() showGui(deep) diff --git a/src/v2/menu/input-mode.ahk b/src/v2/menu/input-mode.ahk index 97db6f1..a8a3a21 100644 --- a/src/v2/menu/input-mode.ahk +++ b/src/v2/menu/input-mode.ahk @@ -13,18 +13,17 @@ fn_input_mode(*) { } createGui(inputModeGui).Show() inputModeGui(info) { - global statusModeEN, conversionModeEN, mode + global statusMode, conversionMode, mode - statusModeEN := readIni("statusModeEN", "", "InputMethod") - conversionModeEN := readIni("conversionModeEN", "", "InputMethod") + statusMode := readIni("statusMode", "", "InputMethod") + conversionMode := readIni("conversionMode", "", "InputMethod") mode := readIni("mode", 1, "InputMethod") g := createGuiOpt("InputTip - 设置输入法模式") gc.modeList := ["【自定义】", "【通用】"] tab := g.AddTab3("-Wrap", ["基础配置", "自定义", "关于自定义"]) tab.UseTab(1) - g.AddText("Section cRed", "如果【通用】模式不可用,需要前往「自定义」标签页去配置【自定义】模式") - g.AddText(, "1. 当前使用的输入法模式:") + g.AddText("Section cRed", "如果【通用】模式不可用,需要前往「自定义」标签页去配置【自定义】模式 ") if (info.i) { return g @@ -32,8 +31,10 @@ fn_input_mode(*) { w := info.w bw := w - g.MarginX * 2 + g.AddText(, "1. 当前使用的输入法模式:") gc.mode := g.AddText("yp cRed w" w / 2) gc.mode.Value := gc.modeList[mode + 1] + g.AddEdit("xs ReadOnly cGray", "输入法模式只有【通用】和【自定义】,这里显示的值会根据配置情况自动变化") g.AddText("xs", "2. 设置获取输入法状态的超时时间: ") timeout := g.AddEdit("yp Number Limit5") timeout.Focus() @@ -45,7 +46,7 @@ fn_input_mode(*) { } writeIni("checkTimeout", value, "InputMethod") global checkTimeout := value - restartJetBrains() + restartJAB() } timeout.Value := checkTimeout g.AddEdit("xs ReadOnly cGray -VScroll w" w, "单位:毫秒,默认 500 毫秒。`n每次切换输入法状态,InputTip 会从系统获取新的输入法状态。`n如果超过了这个时间,则认为获取失败,直接显示英文状态。`n它可能是有时识别不到输入法状态的原因,遇到问题可以尝试调节它。") @@ -63,8 +64,8 @@ fn_input_mode(*) { gc.useShift.Value := useShift + 1 g := createGuiOpt() - g.AddText("cRed", "确定要使用【否】吗?") - g.AddText("cRed", "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘或部分特殊输入法中,可能会导致状态提示间歇性错误。") + g.AddText(, "确定要使用【否】吗?") + g.AddText("cRed", "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘(ENG)或部分特殊输入法中,可能会导致状态提示间歇性错误。") g.AddText("cRed", "建议不要使用【否】,而是启用 Shift 切换状态,这也是几乎所有输入法的默认设置。") if (info.i) { @@ -74,7 +75,7 @@ fn_input_mode(*) { bw := w - g.MarginX * 2 g.AddButton("w" bw, "我确定要使用【否】").OnEvent("Click", e_yes) - g.AddButton("w" bw, "不,我只是误点了").OnEvent("Click", e_no) + g.AddButton("w" bw, "我只是不小心点错了").OnEvent("Click", e_no) e_yes(*) { g.Destroy() gc.useShift.Value := 1 @@ -91,39 +92,49 @@ fn_input_mode(*) { value := item.value - 1 writeIni("useShift", value) global useShift := value - restartJetBrains() + restartJAB() } } - g.AddEdit("xs ReadOnly cGray -VScroll w" w, "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘或部分特殊输入法中,可能会导致状态提示间歇性错误。") + g.AddEdit("xs ReadOnly cGray -VScroll w" w, "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘(ENG)或部分特殊输入法中,可能会导致状态提示间歇性错误。") tab.UseTab(2) g.AddText("Section ReadOnly cRed -VScroll w" w, "首先需要点击上方的「关于自定义」标签页,查看帮助说明,了解如何设置") g.AddText("Section", "优先级顺序: 切换码规则(4) > 切换码数字(3) > 状态码规则(2) > 状态码数字(1)") g.AddText("xs cGray", "输入框中有值的或规则有勾选的,取其中优先级最高的生效`n如果都没有设置或勾选,则自动变回【通用】模式,反之变为【自定义】模式") - g.AddText("Section", "1.") - g.AddText("yp cRed", "英文状态") + g.AddText("Section", "以哪一种状态作为判断依据: ") + g.AddDropDownList("yp Choose" baseStatus + 1, ["英文状态", "中文状态"]).OnEvent("Change", e_changeBaseStatus) + e_changeBaseStatus(item, *) { + value := item.Value - 1 + writeIni("baseStatus", value, "InputMethod") + global baseStatus := value + for v in gc.statusText { + v.value := item.text + } + } + gc.statusText := [] + g.AddText("xs", "1.") + gc.statusText.push(g.AddText("yp cRed", stateMap.%baseStatus%)) g.AddText("yp", "的状态码数字: ") - gc.statusModeEN := g.AddEdit("yp", "") - gc.statusModeEN.Value := Trim(StrReplace(statusModeEN, ":", " ")) - gc.statusModeEN.OnEvent("Change", e_statusModeEN) - e_statusModeEN(item, *) { + gc.statusMode := g.AddEdit("yp", "") + gc.statusMode.Value := Trim(StrReplace(statusMode, ":", " ")) + gc.statusMode.OnEvent("Change", e_statusMode) + e_statusMode(item, *) { if (Trim(item.value) = "") { - writeIni("statusModeEN", "", "InputMethod") - statusModeEN := "" + writeIni("statusMode", "", "InputMethod") + statusMode := "" } else { value := ":" for v in StrSplit(item.value, " ") { value .= v ":" } - writeIni("statusModeEN", value, "InputMethod") - statusModeEN := value + writeIni("statusMode", value, "InputMethod") + statusMode := value } checkModeChange() - restartJetBrains() } checkModeChange() { - if (gc.statusModeEN.Value = "" && gc.conversionModeEN.Value = "" && evenStatusModeEN = "" && evenConversionModeEN = "") { + if (gc.statusMode.Value = "" && gc.conversionMode.Value = "" && evenStatusMode = "" && evenConversionMode = "") { gc.mode.Value := gc.modeList[2] if (mode != 1) { writeIni("mode", 1, "InputMethod") @@ -136,6 +147,7 @@ fn_input_mode(*) { global mode := 0 } } + restartJAB() } handle_mode(value, config, checkbox, default) { @@ -147,72 +159,70 @@ fn_input_mode(*) { writeIni(config, "", "InputMethod") } } - global evenStatusModeEN := readIni("evenStatusModeEN", "", "InputMethod") - global evenConversionModeEN := readIni("evenConversionModeEN", "", "InputMethod") + global evenStatusMode := readIni("evenStatusMode", "", "InputMethod") + global evenConversionMode := readIni("evenConversionMode", "", "InputMethod") checkModeChange() - restartJetBrains() } g.AddText("xs", "2.") - g.AddText("yp cRed", "英文状态") + gc.statusText.push(g.AddText("yp cRed", stateMap.%baseStatus%)) g.AddText("yp", "的状态码规则: ") gc.oddStatusMode := g.AddCheckbox("yp", "使用奇数") - if (evenStatusModeEN != "") { - gc.oddStatusMode.Value := !evenStatusModeEN + if (evenStatusMode != "") { + gc.oddStatusMode.Value := !evenStatusMode } gc.oddStatusMode.OnEvent("Click", e_oddStatusMode) e_oddStatusMode(item, *) { - handle_mode(item.value, "evenStatusModeEN", "evenStatusMode", 0) + handle_mode(item.value, "evenStatusMode", "evenStatusMode", 0) } gc.evenStatusMode := g.AddCheckbox("yp", "使用偶数") - if (evenStatusModeEN != "") { - gc.evenStatusMode.Value := evenStatusModeEN + if (evenStatusMode != "") { + gc.evenStatusMode.Value := evenStatusMode } gc.evenStatusMode.OnEvent("Click", e_evenStatusMode) e_evenStatusMode(item, *) { - handle_mode(item.value, "evenStatusModeEN", "oddStatusMode", 1) + handle_mode(item.value, "evenStatusMode", "oddStatusMode", 1) } g.AddText("xs", "3.") - g.AddText("yp cRed", "英文状态") + gc.statusText.push(g.AddText("yp cRed", stateMap.%baseStatus%)) g.AddText("yp", "的切换码数字: ") - gc.conversionModeEN := g.AddEdit("yp") - gc.conversionModeEN.Value := Trim(StrReplace(conversionModeEN, ":", " ")) - gc.conversionModeEN.OnEvent("Change", e_conversionModeEN) - e_conversionModeEN(item, *) { + gc.conversionMode := g.AddEdit("yp") + gc.conversionMode.Value := Trim(StrReplace(conversionMode, ":", " ")) + gc.conversionMode.OnEvent("Change", e_conversionMode) + e_conversionMode(item, *) { if (Trim(item.value) = "") { - writeIni("conversionModeEN", "", "InputMethod") - conversionModeEN := "" + writeIni("conversionMode", "", "InputMethod") + conversionMode := "" } else { value := ":" for v in StrSplit(item.value, " ") { value .= v ":" } - writeIni("conversionModeEN", value, "InputMethod") - conversionModeEN := value + writeIni("conversionMode", value, "InputMethod") + conversionMode := value } checkModeChange() - restartJetBrains() } g.AddText("xs", "4.") - g.AddText("yp cRed", "英文状态") + gc.statusText.push(g.AddText("yp cRed", stateMap.%baseStatus%)) g.AddText("yp", "的切换码规则: ") gc.oddConversionMode := g.AddCheckbox("yp", "使用奇数") - if (evenConversionModeEN != "") { - gc.oddConversionMode.Value := !evenConversionModeEN + if (evenConversionMode != "") { + gc.oddConversionMode.Value := !evenConversionMode } gc.oddConversionMode.OnEvent("Click", e_oddConversionMode) e_oddConversionMode(item, *) { - handle_mode(item.value, "evenConversionModeEN", "evenConversionMode", 0) + handle_mode(item.value, "evenConversionMode", "evenConversionMode", 0) } gc.evenConversionMode := g.AddCheckbox("yp", "使用偶数") - if (evenConversionModeEN != "") { - gc.evenConversionMode.Value := evenConversionModeEN + if (evenConversionMode != "") { + gc.evenConversionMode.Value := evenConversionMode } gc.evenConversionMode.OnEvent("Click", e_evenConversionMode) e_evenConversionMode(item, *) { - handle_mode(item.value, "evenConversionModeEN", "oddConversionMode", 1) + handle_mode(item.value, "evenConversionMode", "oddConversionMode", 1) } gc.status_btn := g.AddButton("xs w" w, "【显示】实时的状态码和切换码") @@ -241,7 +251,7 @@ fn_input_mode(*) { } tab.UseTab(3) - g.AddEdit("Section r12 ReadOnly w" w, "如何配置【自定义】模式?以讯飞输入法为例:`n1. 点击按钮「显示实时的状态码和切换码」,它会在光标处显示状态码和切换码。`n2. 来回切换输入法的中英文状态观察它们的变化。`n3. 会发现切换码始终为 1,而状态码在英文时为 1,中文时为 2。`n4. 于是,在状态码数字的输入框中填入 1,就会发现已经生效了。`n5. 这里更推荐勾选状态码规则中的「使用奇数」,它包含 1,且范围更大。`n6. 再比如小狼毫(rime)输入法,按照同样的操作流程,你会发现很大的不同。`n7. 它的状态码始终为 1,而切换码在英文时是随机的偶数,中文时是随机的奇数。`n8. 于是,勾选切换码规则中的「使用偶数」后,就会发现已经生效了。`n9. 当然,不要盲目的使用规则扩大范围,比如手心输入法就不能这样做。`n10. 当使用手心输入法按照同样的流程操作时,你会发现又有不同。`n11. 手心输入法的状态码始终为 1,而切换码在英文时为 1,中文时为 1025。`n12. 于是,在状态码数字的输入框中填入 1,就会发现已经生效了。`n13. 但是,这里就不能勾选「使用奇数」,因为中文时的 1025 也是奇数。`n14. 【自定义】模式是靠唯一的值去区分状态,勾选「使用奇数」就无法区分了。`n`n什么是优先级顺序?`n1. 优先级顺序: 切换码规则(4) > 切换码数字(3) > 状态码规则(2) > 状态码数字(1)`n2. 对于【自定义】模式来说,生效的是优先级最高的配置项。`n3. 比如: 你使用了切换码规则,则切换码数字/状态码规则/状态码数字即使有值,也无效。`n`n在数字输入框中,是可以填入许多个的:`n1. 有可能你会遇到这样的情况。`n2. 你发现状态码在英文时不唯一,有时为 0,有时为 3,在中文时为 1。`n3. 这种情况,一个奇数,一个偶数,也无法使用规则。`n4. 你可以直接在状态码数字的输入框中填入它们,以空格分割即可。") + g.AddEdit("Section r14 ReadOnly w" w, "1. 如何配置【自定义】模式?(以讯飞输入法为例,选择英文状态作为判断依据)`n - 点击按钮「显示实时的状态码和切换码」,它会在光标处显示状态码和切换码`n - 来回切换输入法的中英文状态观察它们的变化`n - 会发现切换码始终为 1,而状态码在英文时为 1,中文时为 2`n - 于是,在状态码数字的输入框中填入 1,就会发现已经生效了`n - 这里更推荐勾选状态码规则中的「使用奇数」,它包含 1,且范围更大`n - 再比如小狼毫(rime)输入法,按照同样的操作流程,你会发现很大的不同`n - 它的状态码始终为 1,而切换码在英文时是随机的偶数,中文时是随机的奇数`n - 于是,勾选切换码规则中的「使用偶数」后,就会发现已经生效了`n - 当然,不要盲目的使用规则扩大范围,比如手心输入法就不能这样做`n - 当使用手心输入法按照同样的流程操作时,你会发现又有不同`n - 手心输入法的状态码始终为 1,而切换码在英文时为 1,中文时为 1025`n - 于是,在状态码数字的输入框中填入 1,就会发现已经生效了`n - 但是,这里就不能勾选「使用奇数」,因为中文时的 1025 也是奇数`n - 【自定义】模式是靠唯一的值去区分状态,勾选「使用奇数」就无法区分了`n`n2. 关于配置项「以哪一种状态作为判断依据」`n - 需要根据实际情况选择合适的值`n - 上方的这几个例子,是围绕英文状态来设置的`n - 如果你需要围绕中文状态来设置,你就需要选择中文状态`n - 以小鹤音形输入法为例`n - 它的状态码始终为 1,而切换码在英文时为 257,中文时为 1025`n - 因此,将 257 填入切换码即可`n - 但是如果你同时使用多个输入法,比如它和美式键盘(ENG)`n - 而美式键盘(ENG)的切换码为 1,这就没有办法兼顾这两个输入法`n - 但是换个思路,选择以中文状态为判断依据`n - 将 1025 填入切换码后,小鹤音形能正常识别,而切换到美式键盘(ENG)时`n - 由于切换码不等于1025,自然而然的识别成了英文状态`n`n3. 什么是优先级顺序?`n - 优先级顺序: 切换码规则(4) > 切换码数字(3) > 状态码规则(2) > 状态码数字(1)`n - 假如你使用了切换码规则,勾选了「使用偶数」`n - 那么切换码数字,状态码规则,状态码数字即使有勾选或填入了值,也不会生效`n - 因为切换码规则优先级更高,InputTip 就直接使用它去判断了`n`n4. 关于「状态码数字」和「切换码数字」`n - 在它们的输入框中,可以填入许多个数字,如果遇到以下情况就可以这样做`n - 假如你发现状态码都是 1,区分不了状态,无法使用`n - 而切换码在英文时不唯一,有时为 0,有时为 3,但中文时没有 0 或 3`n - 这种情况下,有奇数也有偶数,使用规则也无法区分`n - 就可以直接在切换码数字的输入框中填入它们,以空格分割它们即可") g.AddLink(, '相关链接: 自定义模式') g.OnEvent("Close", e_close) e_close(*) { diff --git a/src/v2/menu/startup.ahk b/src/v2/menu/startup.ahk index 4b37b93..f6b7930 100644 --- a/src/v2/menu/startup.ahk +++ b/src/v2/menu/startup.ahk @@ -64,12 +64,18 @@ fn_startup(item, *) { btnOpt := ' Disabled ' tip := ' (以管理员模式运行时可用)' } - btn := g.AddButton("w" w btnOpt, "使用「任务计划程序」" tip) + + if (!btnOpt && !powershell) { + btn := g.AddButton("Disabled w" w btnOpt, "使用「任务计划程序」 (无法调用 powershell)") + } else { + btn := g.AddButton("w" w btnOpt, "使用「任务计划程序」" tip) + } + btn.Focus() btn.OnEvent("Click", e_useTask) e_useTask(*) { isStartUp := 1 - FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", A_Startup "\" fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , A_ScriptFullPath, , , 7) + FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", A_Startup "\" fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , favicon, , , 7) fn_handle() } btn := g.AddButton("w" w, "使用应用快捷方式") @@ -79,7 +85,7 @@ fn_startup(item, *) { btn.OnEvent("Click", e_useLnk) e_useLnk(*) { isStartUp := 2 - FileCreateShortcut(A_ScriptFullPath, A_Startup "\" fileLnk, , , , A_ScriptFullPath, , , 7) + FileCreateShortcut(A_ScriptFullPath, A_Startup "\" fileLnk, , , , favicon, , , 7) fn_handle() } g.AddButton("w" w btnOpt, "使用「注册表」" tip).OnEvent("Click", e_useReg) diff --git a/src/v2/menu/switch-window.ahk b/src/v2/menu/switch-window.ahk index 49008c8..18a574b 100644 --- a/src/v2/menu/switch-window.ahk +++ b/src/v2/menu/switch-window.ahk @@ -249,7 +249,7 @@ fn_switch_window(*) { } } - g.AddButton("xs w" bw / 3, "刷新应用进程列表").OnEvent("Click", e_refresh) + g.AddButton("xs w" bw / 3, "刷新此界面").OnEvent("Click", e_refresh) e_refresh(*) { fn_close() showGui(deep) diff --git a/src/v2/menu/tray-menu.ahk b/src/v2/menu/tray-menu.ahk index 1fdfd49..576e15c 100644 --- a/src/v2/menu/tray-menu.ahk +++ b/src/v2/menu/tray-menu.ahk @@ -39,9 +39,9 @@ makeTrayMenu() { A_TrayMenu.Add() A_TrayMenu.Add("启用 JAB/JetBrains IDE 支持", fn_JAB) - if (enableJetBrainsSupport) { + if (enableJABSupport) { A_TrayMenu.Check("启用 JAB/JetBrains IDE 支持") - runJetBrains() + runJAB() } A_TrayMenu.Add() A_TrayMenu.Add("关于", fn_about) @@ -56,7 +56,7 @@ fn_exit(*) { ExitApp() } fn_restart(flag := 0, *) { - if (flag || enableJetBrainsSupport) { + if (flag || enableJABSupport) { RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") } Run(A_ScriptFullPath) @@ -235,7 +235,7 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { return g } } - g.AddButton("Section yp w" w / 2, "刷新应用进程列表").OnEvent("Click", e_refresh) + g.AddButton("Section yp w" w / 2, "刷新此界面").OnEvent("Click", e_refresh) e_refresh(*) { fn_close() showGui(deep) @@ -450,7 +450,7 @@ fn_white_list(*) { fn(value) { global app_show_state := ":" value ":" gc.whiteListGui_LV_rm_title.Text := "符号显示白名单 ( " gc.whiteListGui_LV_rm.GetCount() " 个 )" - restartJetBrains() + restartJAB() } } @@ -506,13 +506,53 @@ getPicDir() { picList.InsertAt(1, '') return picList } - /** - * @param runOrStop 1: Run; 0:Stop + * 启动 JAB 进程 + * @returns {Integer} 1/0: 是否存在错误 */ -runJetBrains() { - SetTimer(runAppTimer, -10) +runJAB() { + if (!powershell && enableJABSupport) { + writeIni("enableJABSupport", "0") + global enableJABSupport := 0 + A_TrayMenu.Uncheck("启用 JAB/JetBrains IDE 支持") + if (A_IsCompiled) { + try { + FileDelete("InputTip.JAB.JetBrains.exe") + } + } + + + if (gc.w.subGui) { + gc.w.subGui.Destroy() + gc.w.subGui := "" + } + createGui(errGui).Show() + errGui(info) { + g := createGuiOpt("InputTip - powershell 调用失败!") + g.AddText("cRed", "- 在当前系统环境中,尝试调用 powershell 失败了`n-「启用 JAB/JetBrains IDE 支持」这个功能将会被自动禁用") + g.AddText("cRed", "- 如果你想继续使用它,你需要解决 cmd 调用 powershell 失败的问题") + + if (info.i) { + return g + } + w := info.w + + g.AddButton("w" w, "我知道了").OnEvent("Click", e_close) + e_close(*) { + g.Destroy() + } + gc.w.subGui := g + return g + } + return 1 + } + FileInstall("InputTip.JAB.JetBrains.exe", "InputTip.JAB.JetBrains.exe", 1) + SetTimer(runAppTimer, 50) runAppTimer() { + if (WinExist("ahk_exe InputTip.JAB.JetBrains.exe")) { + SetTimer(, 0) + return + } if (A_IsAdmin) { try { RunWait('powershell -NoProfile -Command $action = New-ScheduledTaskAction -Execute "`'\"' A_ScriptDir '\InputTip.JAB.JetBrains.exe\"`'";$principal = New-ScheduledTaskPrincipal -UserId "' A_UserName '" -LogonType ServiceAccount -RunLevel Limited;$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -DontStopOnIdleEnd -ExecutionTimeLimit 10 -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1);$task = New-ScheduledTask -Action $action -Principal $principal -Settings $settings;Register-ScheduledTask -TaskName "abgox.InputTip.JAB.JetBrains" -InputObject $task -Force', , "Hide") @@ -522,4 +562,5 @@ runJetBrains() { Run(A_ScriptDir "\InputTip.JAB.JetBrains.exe", , "Hide") } } + return 0 } diff --git a/src/v2/utils/IME.ahk b/src/v2/utils/IME.ahk index e3cdb02..a3e8bd6 100644 --- a/src/v2/utils/IME.ahk +++ b/src/v2/utils/IME.ahk @@ -1,18 +1,19 @@ /** * @link https://github.com/Tebayaki/AutoHotkeyScripts/blob/main/lib/IME.ahk - * @Tip 有所修改,外部必须提供变量 checkTimeout,statusModeEN,conversionModeEN,evenStatusModeEN,evenConversionModeEN + * @Tip 有所修改,外部必须提供变量 checkTimeout,baseStatus,statusMode,conversionMode,evenStatusMode,evenConversionMode * @example - * statusModeEN := 0 ; 英文状态时的状态码 - * conversionModeEN := 0 ; 英文状态时的转换码 - * evenStatusModeEN := "" - * evenConversionModeEN := "" - * checkTimeout := 1000 ; 超时时间 单位:毫秒 + * checkTimeout := 1000 ; 超时时间(单位:毫秒) + * baseStatus := 0 ; 以英文状态作为判断依据 + * statusMode := 0 ; 状态码 + * conversionMode := 0 ; 转换码 + * evenStatusMode := "" ; 状态码规则 + * evenConversionMode := "" ; 转换码规则 * IME.GetInputMode() ; 获取当前输入法输入模式 * IME.SetInputMode(!IME.GetInputMode()) ; 切换当前输入法输入模式 */ class IME { static GetInputMode(hwnd := this.GetFocusedWindow()) { - if (statusModeEN = "" && evenStatusModeEN = "" && conversionModeEN = "" && evenConversionModeEN = "") { + if (statusMode = "" && evenStatusMode = "" && conversionMode = "" && evenConversionMode = "") { if (!this.GetOpenStatus(hwnd)) { return { code: 0, @@ -30,32 +31,64 @@ class IME { ; 切换码 v := this.GetConversionMode(hwnd) flag := v & 1 - if (evenConversionModeEN != "") { - return { - code: v, - isCN: evenConversionModeEN ? flag : !flag + + if (baseStatus) { + if (evenConversionMode != "") { + return { + code: v, + isCN: evenConversionMode ? !flag : flag + } } - } - if (conversionModeEN != "") { - return { - code: v, - isCN: !(InStr(conversionModeEN, ":" v ":")) + if (conversionMode != "") { + return { + code: v, + isCN: InStr(conversionMode, ":" v ":") + } + } + } else { + if (evenConversionMode != "") { + return { + code: v, + isCN: evenConversionMode ? flag : !flag + } + } + if (conversionMode != "") { + return { + code: v, + isCN: !(InStr(conversionMode, ":" v ":")) + } } } ; 状态码 v := this.GetOpenStatus(hwnd) flag := v & 1 - if (evenStatusModeEN != "") { - return { - code: v, - isCN: evenStatusModeEN ? flag : !flag + + if (baseStatus) { + if (evenStatusMode != "") { + return { + code: v, + isCN: evenStatusMode ? !flag : flag + } } - } - if (statusModeEN != "") { - return { - code: 0, - isCN: !(InStr(statusModeEN, ":" v ":")) + if (statusMode != "") { + return { + code: 0, + isCN: InStr(statusMode, ":" v ":") + } + } + } else { + if (evenStatusMode != "") { + return { + code: v, + isCN: evenStatusMode ? flag : !flag + } + } + if (statusMode != "") { + return { + code: 0, + isCN: !(InStr(statusMode, ":" v ":")) + } } } } diff --git a/src/v2/utils/check-version.ahk b/src/v2/utils/check-version.ahk index bc687c3..0e0c3c7 100644 --- a/src/v2/utils/check-version.ahk +++ b/src/v2/utils/check-version.ahk @@ -141,7 +141,7 @@ checkUpdate(init := 0, once := false) { } } if (done) { - if (enableJetBrainsSupport) { + if (enableJABSupport) { try { RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") FileDelete("InputTip.JAB.JetBrains.exe") @@ -203,7 +203,7 @@ checkUpdate(init := 0, once := false) { g.AddText("yp", "已忽略") g.AddText("xs", "修改方式:「托盘菜单」=>「设置更新检查」") - g.AddText("cGray", "如果你在使用过程中有任何问题,先检查版本是否为最新版本`n如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue`nGithub 和其他相关地址可以在软件托盘菜单的「关于」中找到") + g.AddText("cGray", "如果你在使用过程中有任何问题,先检查版本是否为最新版本`n如果更新到最新版本,问题依然存在,请前往 Github 新建一个 issue`nGithub 和其他相关地址可以在软件托盘菜单的「关于」中找到") if (info.i) { return g @@ -273,7 +273,7 @@ checkUpdate(init := 0, once := false) { g.AddText("yp", "已忽略") g.AddText("xs", "修改方式:「托盘菜单」=>「设置更新检查」") - g.AddText("cGray", "如果你在使用过程中有任何问题,先检查版本是否为最新版本`n如果更新到最新版本,问题依然存在,请前往 Github 发起一个 issue`nGithub 和其他相关地址可以在软件托盘菜单的「关于」中找到") + g.AddText("cGray", "如果你在使用过程中有任何问题,先检查版本是否为最新版本`n如果更新到最新版本,问题依然存在,请前往 Github 新建一个 issue`nGithub 和其他相关地址可以在软件托盘菜单的「关于」中找到") if (info.i) { return g @@ -300,22 +300,32 @@ checkUpdate(init := 0, once := false) { checkUpdateDone() { if (FileExist(A_AppData "\.abgox-InputTip-update-version.txt")) { try { - JetBrains_list := IniRead("InputTip.ini", "Config-v2", "JetBrains_list") - writeIni("cursor_mode_JAB", JetBrains_list) + _ := IniRead("InputTip.ini", "Config-v2", "JetBrains_list") + writeIni("cursor_mode_JAB", _) IniDelete("InputTip.ini", "Config-v2", "JetBrains_list") } + try { + _ := IniRead("InputTip.ini", "Config-v2", "enableJetBrainsSupport") + writeIni("enableJABSupport", _) + IniDelete("InputTip.ini", "Config-v2", "enableJetBrainsSupport") + } try { ignoreUpdate := IniRead("InputTip.ini", "Config-v2", "ignoreUpdate") - if (ignoreUpdate) { - checkUpdateDelay := readIni("checkUpdateDelay", 0) - } else { - checkUpdateDelay := readIni("checkUpdateDelay", 1440) - } + _ := ignoreUpdate ? 0 : 1440 + writeIni("checkUpdateDelay", _) IniDelete("InputTip.ini", "Config-v2", "ignoreUpdate") } try { - IniRead("InputTip.ini", "InputMethod", "statusModeEN") + _ := IniRead("InputTip.ini", "InputMethod", "statusModeEN") + writeIni("statusMode", _, "InputMethod") + writeIni("conversionMode", readIni("conversionModeEN", "", "InputMethod"), "InputMethod") + writeIni("evenStatusMode", readIni("evenStatusModeEN", "", "InputMethod"), "InputMethod") + writeIni("evenConversionMode", readIni("evenConversionModeEN", "", "InputMethod"), "InputMethod") + IniDelete("InputTip.ini", "InputMethod", "statusModeEN") + IniDelete("InputTip.ini", "InputMethod", "conversionModeEN") + IniDelete("InputTip.ini", "InputMethod", "evenStatusModeEN") + IniDelete("InputTip.ini", "InputMethod", "evenConversionModeEN") } catch { mode := readIni("mode", 1, "InputMethod") switch mode { @@ -326,13 +336,13 @@ checkUpdateDone() { case 3: { ; 讯飞输入法 - writeIni("evenStatusModeEN", "0", "InputMethod") + writeIni("evenStatusMode", "0", "InputMethod") writeIni("mode", 0, "InputMethod") } case 4: { ; 手心输入法 - writeIni("conversionModeEN", ":1:", "InputMethod") + writeIni("conversionMode", ":1:", "InputMethod") writeIni("mode", 0, "InputMethod") } } diff --git a/src/v2/utils/options.ahk b/src/v2/utils/options.ahk index 7bfc508..5d90fe8 100644 --- a/src/v2/utils/options.ahk +++ b/src/v2/utils/options.ahk @@ -12,5 +12,5 @@ InstallKeybdHook CoordMode 'Mouse', 'Screen' SetStoreCapsLockMode 0 -;@AHK2Exe-SetVersion 2.30.2 -currentVersion := "2.30.2" +;@AHK2Exe-SetVersion 2.31.0 +currentVersion := "2.31.0" diff --git a/src/v2/utils/show.ahk b/src/v2/utils/show.ahk index b787567..e89d806 100644 --- a/src/v2/utils/show.ahk +++ b/src/v2/utils/show.ahk @@ -130,69 +130,3 @@ updateDelay() { } } } -loadCursor(state, change := 0) { - global lastCursor - if (changeCursor) { - if (state != lastCursor || change) { - for v in cursorInfo { - if (v.%state%) { - DllCall("SetSystemCursor", "Ptr", DllCall("LoadCursorFromFile", "Str", v.%state%, "Ptr"), "Int", v.value) - } - } - lastCursor := state - } - } -} -loadSymbol(state, left, top) { - global lastSymbol, isOverSymbol - static old_left := 0, old_top := 0 - if (left = old_left && top = old_top) { - if (state = lastSymbol || (isOverSymbol && A_TimeIdleKeyboard > leaveDelay)) { - return - } - } else { - isOverSymbol := 0 - } - - hideSymbol() - if (!symbolType || !canShowSymbol) { - return - } - showConfig := "NA " - if (symbolType = 1) { - _ := symbolConfig.enableIsolateConfigPic - x := _ ? symbolConfig.%"pic_offset_x" state% : symbolConfig.pic_offset_x - y := _ ? symbolConfig.%"pic_offset_y" state% : symbolConfig.pic_offset_y - - showConfig .= "x" left + x "y" top + y - } else if (symbolType = 2) { - _ := symbolConfig.enableIsolateConfigBlock - w := _ ? symbolConfig.%"symbol_width" state% : symbolConfig.symbol_width - h := _ ? symbolConfig.%"symbol_height" state% : symbolConfig.symbol_height - x := _ ? symbolConfig.%"offset_x" state% : symbolConfig.offset_x - y := _ ? symbolConfig.%"offset_y" state% : symbolConfig.offset_y - - showConfig .= "w" w "h" h "x" left + x "y" top + y - } else if (symbolType = 3) { - _ := symbolConfig.enableIsolateConfigText - x := _ ? symbolConfig.%"textSymbol_offset_x" state% : symbolConfig.textSymbol_offset_x - y := _ ? symbolConfig.%"textSymbol_offset_y" state% : symbolConfig.textSymbol_offset_y - - showConfig .= "x" left + x "y" top + y - } - if (symbolGui.%state%) { - symbolGui.%state%.Show(showConfig) - } - - lastSymbol := state - old_top := top - old_left := left -} -hideSymbol() { - for state in ["CN", "EN", "Caps"] { - try { - symbolGui.%state%.Hide() - } - } - global lastSymbol := "" -} diff --git a/src/v2/utils/var.ahk b/src/v2/utils/var.ahk index e827221..7d2f0f1 100644 --- a/src/v2/utils/var.ahk +++ b/src/v2/utils/var.ahk @@ -4,14 +4,16 @@ fontOpt := ["s" readIni("gui_font_size", "12"), "微软雅黑"] ; 输入法模式 mode := readIni("mode", 1, "InputMethod") -; 指定的英文状态码 -statusModeEN := readIni("statusModeEN", "", "InputMethod") -; 指定的英文切换码 -conversionModeEN := readIni("conversionModeEN", "", "InputMethod") +; 以哪一种状态作为判断依据 +baseStatus := readIni("baseStatus", 0, "InputMethod") +; 指定的状态码 +statusMode := readIni("statusMode", "", "InputMethod") +; 指定的切换码 +conversionMode := readIni("conversionMode", "", "InputMethod") ; 是否使用偶数 -evenStatusModeEN := readIni("evenStatusModeEN", "", "InputMethod") -evenConversionModeEN := readIni("evenConversionModeEN", "", "InputMethod") +evenStatusMode := readIni("evenStatusMode", "", "InputMethod") +evenConversionMode := readIni("evenConversionMode", "", "InputMethod") checkTimeout := readIni("checkTimeout", 500, "InputMethod") @@ -41,7 +43,28 @@ delay := readIni("delay", 50) isStartUp := readIni("isStartUp", 0) ; 启用 JAB/JetBrains 支持 -enableJetBrainsSupport := readIni("enableJetBrainsSupport", 0) +enableJABSupport := readIni("enableJABSupport", 0) + +stateMap := { + CN: "中文状态", + 1: "中文状态", + EN: "英文状态", + 0: "英文状态", + Caps: "大写锁定" +} + +left := 0, top := 0 +lastWindow := "", lastSymbol := "", lastCursor := "" + +needHide := 0 +exe_name := "" +exe_str := "::" + +leaveDelay := delay + 500 + +isWait := 0 + +canShowSymbol := 0 updateList(1) @@ -120,32 +143,13 @@ for v in cursorInfo { } } -stateMap := { - CN: "中文状态", - EN: "英文状态", - Caps: "大写锁定" -} - -left := 0, top := 0 -lastWindow := "", lastSymbol := "", lastCursor := "" - -needHide := 0 -exe_name := "" -exe_str := "::" - -leaveDelay := delay + 500 - -isWait := 0 - -canShowSymbol := 0 - updateSymbol(1) updateCursor(init := 0) { global CN_cursor, EN_cursor, Caps_cursor, cursorInfo if (!init) { - restartJetBrains() + restartJAB() } CN_cursor := readIni("CN_cursor", "InputTipCursor\default\CN") @@ -169,6 +173,32 @@ updateCursor(init := 0) { } } } +loadCursor(state, change := 0) { + global lastCursor + if (changeCursor) { + if (state != lastCursor || change) { + for v in cursorInfo { + if (v.%state%) { + DllCall("SetSystemCursor", "Ptr", DllCall("LoadCursorFromFile", "Str", v.%state%, "Ptr"), "Int", v.value) + } + } + lastCursor := state + } + } +} +reloadCursor() { + if (changeCursor) { + if (GetKeyState("CapsLock", "T")) { + loadCursor("Caps", 1) + } else { + if (isCN()) { + loadCursor("CN", 1) + } else { + loadCursor("EN", 1) + } + } + } +} updateSymbol(init := 0) { global symbolGui, symbolConfig @@ -176,7 +206,7 @@ updateSymbol(init := 0) { hideSymbol() if (!init) { - restartJetBrains() + restartJAB() } ; 存放不同状态下的符号 symbolGui := { @@ -364,24 +394,52 @@ updateSymbol(init := 0) { } } } - - reloadSymbol() } - -reloadCursor() { - if (changeCursor) { - if (GetKeyState("CapsLock", "T")) { - loadCursor("Caps", 1) - } else { - if (isCN()) { - loadCursor("CN", 1) - } else { - loadCursor("EN", 1) - } +loadSymbol(state, left, top) { + global lastSymbol, isOverSymbol + static old_left := 0, old_top := 0 + if (left = old_left && top = old_top) { + if (state = lastSymbol || (isOverSymbol && A_TimeIdleKeyboard > leaveDelay)) { + return } + } else { + isOverSymbol := 0 } -} + hideSymbol() + if (!symbolType || !canShowSymbol) { + return + } + showConfig := "NA " + if (symbolType = 1) { + _ := symbolConfig.enableIsolateConfigPic + x := _ ? symbolConfig.%"pic_offset_x" state% : symbolConfig.pic_offset_x + y := _ ? symbolConfig.%"pic_offset_y" state% : symbolConfig.pic_offset_y + + showConfig .= "x" left + x "y" top + y + } else if (symbolType = 2) { + _ := symbolConfig.enableIsolateConfigBlock + w := _ ? symbolConfig.%"symbol_width" state% : symbolConfig.symbol_width + h := _ ? symbolConfig.%"symbol_height" state% : symbolConfig.symbol_height + x := _ ? symbolConfig.%"offset_x" state% : symbolConfig.offset_x + y := _ ? symbolConfig.%"offset_y" state% : symbolConfig.offset_y + + showConfig .= "w" w "h" h "x" left + x "y" top + y + } else if (symbolType = 3) { + _ := symbolConfig.enableIsolateConfigText + x := _ ? symbolConfig.%"textSymbol_offset_x" state% : symbolConfig.textSymbol_offset_x + y := _ ? symbolConfig.%"textSymbol_offset_y" state% : symbolConfig.textSymbol_offset_y + + showConfig .= "x" left + x "y" top + y + } + if (symbolGui.%state%) { + symbolGui.%state%.Show(showConfig) + } + + lastSymbol := state + old_top := top + old_left := left +} reloadSymbol() { if (symbolType) { canShowSymbol := returnCanShowSymbol(&left, &top) @@ -399,6 +457,14 @@ reloadSymbol() { } } } +hideSymbol() { + for state in ["CN", "EN", "Caps"] { + try { + symbolGui.%state%.Hide() + } + } + global lastSymbol := "" +} pauseApp(*) { if (A_IsPaused) { @@ -406,28 +472,30 @@ pauseApp(*) { TraySetIcon("InputTipSymbol/default/favicon.png", , 1) A_IconTip := "当前状态: 【运行中】`nInputTip - 一个输入法状态提示工具" reloadSymbol() - if (enableJetBrainsSupport) { - runJetBrains() + if (enableJABSupport) { + runJAB() } } else { A_TrayMenu.Check("暂停/运行") TraySetIcon("InputTipSymbol/default/favicon-pause.png", , 1) A_IconTip := "当前状态: 【已暂停】`nInputTip - 一个输入法状态提示工具" hideSymbol() - if (enableJetBrainsSupport) { + if (enableJABSupport) { RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") } } Pause(-1) } - -restartJetBrains() { +restartJAB() { static done := 1 - if (done && enableJetBrainsSupport) { + if (done && enableJABSupport) { SetTimer(restartAppTimer, -10) restartAppTimer() { done := 0 RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") + if (!powershell) { + return + } if (A_IsAdmin) { try { RunWait('powershell -NoProfile -Command $action = New-ScheduledTaskAction -Execute "`'\"' A_ScriptDir '\InputTip.JAB.JetBrains.exe\"`'";$principal = New-ScheduledTaskPrincipal -UserId "' A_UserName '" -LogonType ServiceAccount -RunLevel Limited;$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -DontStopOnIdleEnd -ExecutionTimeLimit 10 -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1);$task = New-ScheduledTask -Action $action -Principal $principal -Settings $settings;Register-ScheduledTask -TaskName "abgox.InputTip.JAB.JetBrains" -InputObject $task -Force', , "Hide") @@ -445,7 +513,7 @@ updateList(init := 0) { global if (!init) { - restartJetBrains() + restartJAB() } ; 应用列表: 符号显示黑名单 app_hide_state := ":" readIni('app_hide_state', '') ":" @@ -460,10 +528,26 @@ updateList(init := 0) { ; 应用列表: 自动切换到大写锁定 app_Caps := ":" readIni('app_Caps', '') ":" } +updateWhiteList(app) { + if (!useWhiteList) { + return + } + global app_show_state + _app_show_state := readIni("app_show_state", "") + if (!InStr(app_show_state, ":" app ":")) { + if (_app_show_state) { + _app_show_state .= ":" app + } else { + _app_show_state := app + } + app_show_state := ":" _app_show_state ":" + writeIni("app_show_state", _app_show_state) + } +} updateAppOffset(init := 0) { global app_offset := {} if (!init) { - restartJetBrains() + restartJAB() } for i, v in StrSplit(readIni("app_offset", ""), ":") { part := StrSplit(v, "|") @@ -479,7 +563,7 @@ updateAppOffset(init := 0) { updateCursorMode(init := 0) { global modeList if (!init) { - restartJetBrains() + restartJAB() } modeList := { HOOK: ":" arrJoin(defaultModeList.HOOK, ":") ":", @@ -511,20 +595,3 @@ updateCursorMode(init := 0) { modeList.%item% .= %item% ":" } } - -updateWhiteList(app) { - if (!useWhiteList) { - return - } - global app_show_state - _app_show_state := readIni("app_show_state", "") - if (!InStr(app_show_state, ":" app ":")) { - if (_app_show_state) { - _app_show_state .= ":" app - } else { - _app_show_state := app - } - app_show_state := ":" _app_show_state ":" - writeIni("app_show_state", _app_show_state) - } -} diff --git a/src/v2/utils/verify-file.ahk b/src/v2/utils/verify-file.ahk index 348b249..3b72457 100644 --- a/src/v2/utils/verify-file.ahk +++ b/src/v2/utils/verify-file.ahk @@ -1,4 +1,4 @@ -dirList := ["InputTipSymbol", "InputTipSymbol\default"] +dirList := ["InputTipSymbol", "InputTipSymbol\default", "InputTipCursor", "InputTipCursor\default", "InputTipCursor\default\CN", "InputTipCursor\default\EN", "InputTipCursor\default\Caps"] for d in dirList { if (!DirExist(d)) { @@ -25,35 +25,143 @@ if (!FileExist("InputTipSymbol\default\favicon-pause.png")) { FileInstall("img\favicon-pause.png", "InputTipSymbol\default\favicon-pause.png", 1) } -cursor_temp_zip := A_Temp "\abgox-InputTipCursor-temp.zip" -if (!DirExist("InputTipCursor") || !DirExist("InputTipCursor\default")) { - FileInstall("InputTipCursor.zip", cursor_temp_zip, 1) - waitFileInstall(cursor_temp_zip) - try { - RunWait("powershell -NoProfile -Command Expand-Archive -Path '" cursor_temp_zip "' -DestinationPath '" A_ScriptDir "'", , "Hide") - } catch { - MsgBox("软件相关文件释放失败!", , "0x1000 0x10") - ExitApp() - } - try { - FileDelete(cursor_temp_zip) - } + +if (!FileExist("InputTipCursor\default\CN\AppStarting.ani")) { + FileInstall("InputTipCursor\default\CN\AppStarting.ani", "InputTipCursor\default\CN\AppStarting.ani", 1) +} +if (!FileExist("InputTipCursor\default\CN\Arrow.cur")) { + FileInstall("InputTipCursor\default\CN\Arrow.cur", "InputTipCursor\default\CN\Arrow.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\Cross.cur")) { + FileInstall("InputTipCursor\default\CN\Cross.cur", "InputTipCursor\default\CN\Cross.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\Hand.cur")) { + FileInstall("InputTipCursor\default\CN\Hand.cur", "InputTipCursor\default\CN\Hand.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\Help.cur")) { + FileInstall("InputTipCursor\default\CN\Help.cur", "InputTipCursor\default\CN\Help.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\IBeam.cur")) { + FileInstall("InputTipCursor\default\CN\IBeam.cur", "InputTipCursor\default\CN\IBeam.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\No.cur")) { + FileInstall("InputTipCursor\default\CN\No.cur", "InputTipCursor\default\CN\No.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\Pen.cur")) { + FileInstall("InputTipCursor\default\CN\Pen.cur", "InputTipCursor\default\CN\Pen.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\SizeAll.cur")) { + FileInstall("InputTipCursor\default\CN\SizeAll.cur", "InputTipCursor\default\CN\SizeAll.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\SizeNESW.cur")) { + FileInstall("InputTipCursor\default\CN\SizeNESW.cur", "InputTipCursor\default\CN\SizeNESW.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\SizeNS.cur")) { + FileInstall("InputTipCursor\default\CN\SizeNS.cur", "InputTipCursor\default\CN\SizeNS.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\SizeNWSE.cur")) { + FileInstall("InputTipCursor\default\CN\SizeNWSE.cur", "InputTipCursor\default\CN\SizeNWSE.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\SizeWE.cur")) { + FileInstall("InputTipCursor\default\CN\SizeWE.cur", "InputTipCursor\default\CN\SizeWE.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\UpArrow.cur")) { + FileInstall("InputTipCursor\default\CN\UpArrow.cur", "InputTipCursor\default\CN\UpArrow.cur", 1) +} +if (!FileExist("InputTipCursor\default\CN\Wait.ani")) { + FileInstall("InputTipCursor\default\CN\Wait.ani", "InputTipCursor\default\CN\Wait.ani", 1) } -waitFileInstall(path, isExit := 1) { - t := 0 - while (!FileExist(path)) { - if (t > 30) { - MsgBox("软件相关文件释放失败!", , "0x1000 0x10") - if (isExit) { - ExitApp() - } else { - break - } - } - t++ - Sleep(1000) - } +if (!FileExist("InputTipCursor\default\EN\AppStarting.ani")) { + FileInstall("InputTipCursor\default\EN\AppStarting.ani", "InputTipCursor\default\EN\AppStarting.ani", 1) +} +if (!FileExist("InputTipCursor\default\EN\Arrow.cur")) { + FileInstall("InputTipCursor\default\EN\Arrow.cur", "InputTipCursor\default\EN\Arrow.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\Cross.cur")) { + FileInstall("InputTipCursor\default\EN\Cross.cur", "InputTipCursor\default\EN\Cross.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\Hand.cur")) { + FileInstall("InputTipCursor\default\EN\Hand.cur", "InputTipCursor\default\EN\Hand.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\Help.cur")) { + FileInstall("InputTipCursor\default\EN\Help.cur", "InputTipCursor\default\EN\Help.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\IBeam.cur")) { + FileInstall("InputTipCursor\default\EN\IBeam.cur", "InputTipCursor\default\EN\IBeam.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\No.cur")) { + FileInstall("InputTipCursor\default\EN\No.cur", "InputTipCursor\default\EN\No.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\Pen.cur")) { + FileInstall("InputTipCursor\default\EN\Pen.cur", "InputTipCursor\default\EN\Pen.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\SizeAll.cur")) { + FileInstall("InputTipCursor\default\EN\SizeAll.cur", "InputTipCursor\default\EN\SizeAll.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\SizeNESW.cur")) { + FileInstall("InputTipCursor\default\EN\SizeNESW.cur", "InputTipCursor\default\EN\SizeNESW.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\SizeNS.cur")) { + FileInstall("InputTipCursor\default\EN\SizeNS.cur", "InputTipCursor\default\EN\SizeNS.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\SizeNWSE.cur")) { + FileInstall("InputTipCursor\default\EN\SizeNWSE.cur", "InputTipCursor\default\EN\SizeNWSE.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\SizeWE.cur")) { + FileInstall("InputTipCursor\default\EN\SizeWE.cur", "InputTipCursor\default\EN\SizeWE.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\UpArrow.cur")) { + FileInstall("InputTipCursor\default\EN\UpArrow.cur", "InputTipCursor\default\EN\UpArrow.cur", 1) +} +if (!FileExist("InputTipCursor\default\EN\Wait.ani")) { + FileInstall("InputTipCursor\default\EN\Wait.ani", "InputTipCursor\default\EN\Wait.ani", 1) +} + +if (!FileExist("InputTipCursor\default\Caps\AppStarting.ani")) { + FileInstall("InputTipCursor\default\Caps\AppStarting.ani", "InputTipCursor\default\Caps\AppStarting.ani", 1) +} +if (!FileExist("InputTipCursor\default\Caps\Arrow.cur")) { + FileInstall("InputTipCursor\default\Caps\Arrow.cur", "InputTipCursor\default\Caps\Arrow.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\Cross.cur")) { + FileInstall("InputTipCursor\default\Caps\Cross.cur", "InputTipCursor\default\Caps\Cross.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\Hand.cur")) { + FileInstall("InputTipCursor\default\Caps\Hand.cur", "InputTipCursor\default\Caps\Hand.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\Help.cur")) { + FileInstall("InputTipCursor\default\Caps\Help.cur", "InputTipCursor\default\Caps\Help.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\IBeam.cur")) { + FileInstall("InputTipCursor\default\Caps\IBeam.cur", "InputTipCursor\default\Caps\IBeam.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\No.cur")) { + FileInstall("InputTipCursor\default\Caps\No.cur", "InputTipCursor\default\Caps\No.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\Pen.cur")) { + FileInstall("InputTipCursor\default\Caps\Pen.cur", "InputTipCursor\default\Caps\Pen.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\SizeAll.cur")) { + FileInstall("InputTipCursor\default\Caps\SizeAll.cur", "InputTipCursor\default\Caps\SizeAll.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\SizeNESW.cur")) { + FileInstall("InputTipCursor\default\Caps\SizeNESW.cur", "InputTipCursor\default\Caps\SizeNESW.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\SizeNS.cur")) { + FileInstall("InputTipCursor\default\Caps\SizeNS.cur", "InputTipCursor\default\Caps\SizeNS.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\SizeNWSE.cur")) { + FileInstall("InputTipCursor\default\Caps\SizeNWSE.cur", "InputTipCursor\default\Caps\SizeNWSE.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\SizeWE.cur")) { + FileInstall("InputTipCursor\default\Caps\SizeWE.cur", "InputTipCursor\default\Caps\SizeWE.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\UpArrow.cur")) { + FileInstall("InputTipCursor\default\Caps\UpArrow.cur", "InputTipCursor\default\Caps\UpArrow.cur", 1) +} +if (!FileExist("InputTipCursor\default\Caps\Wait.ani")) { + FileInstall("InputTipCursor\default\Caps\Wait.ani", "InputTipCursor\default\Caps\Wait.ani", 1) } /**