diff --git a/.gitignore b/.gitignore index d8d8f4d..07589ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -InputTipCursor -InputTipSymbol +**/InputTipCursor/default +**/InputTipSymbol/default +test/** diff --git a/README.md b/README.md index 9724811..fea77af 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,10 @@ ### 介绍 +> [!Tip] +> +> QQ 反馈交流群: [451860327](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZfHFP_gIMyY6kZvqRmJhrsMlvnLDjLf6&authKey=lXo50SvLgudu%2BettInNZdb2OXGjs%2BxsoqsKIB88Vcq%2FjMb9uEW5thwU5Nm85KNX4&noverify=0&group_code=451860327) + - 使用 `AutoHotKey` 编写,仅 Windows 系统可用 - 一个实时的输入法状态(中文/英文/大写锁定)提示工具 @@ -324,15 +328,18 @@ - 一个万能的模式,需要根据实际情况设置状态码(规则)和切换码(规则) - 详情参考: [关于【自定义】模式](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://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 397197d..e7bf883 100644 --- a/src/v2/CHANGELOG.md +++ b/src/v2/CHANGELOG.md @@ -2,42 +2,43 @@ - 没有特别说明的版本都是修复问题 -## 2.31.0 +## 2.32.0 -> [!Tip] -> -> 所有代码完成重构 +- 在 `托盘菜单` 中添加了 `更改用户信息` + + - 域用户需要修改用户名,才能正常使用 `开机自启动` 中的 `任务计划程序` + +- 检查到新版本后的 `确认更新` 不再依赖 powershell + +- 如果无法调用 powershell,依赖 `powershell` 的以下相关功能会自动禁用 + + - `开机自启动` 中的 `任务计划程序` + - `启用 JAB/JetBrains IDE 支持` + +- 其他的修复和优化 + +## 2.31.0 - 新增 1. 当鼠标悬浮在符号上时,符号立即隐藏 - - 此功能在 `2.28.0` 中由于存在问题被移除,现在重新添加 - 2. 在 `设置输入法模式` 的 `自定义` 中,添加了 `状态码规则`、`切换码规则` 和 `以哪一种状态作为判断依据` - 3. 为符号添加了不同状态下符号的独立配置 + 4. 新增了应用暂停时的软件图标 - 变动 1. 将 `设置输入法模式` 中的 `讯飞输入法` 和 `手心输入法` 模式合并到 `自定义` 中 - - 现在只有两种输入法模式: `通用` 和 `自定义` - 2. 文本符号中所有配置独立,不再依赖方块符号中的配置 - - `2.31.0` 之前的版本,文本符号的透明度、偏移量、边框样式、背景颜色由方块符号中的相同配置决定 - 3. 统一配置项的值的计算,部分之前跟随 `DPI` 缩放的配置项不再跟随 `DPI` 缩放 - - 这会导致从版本更改后符号可能会变小,你需要重新调整宽高大小 - - 4. 减少了对 powershell 的依赖 - - 现在,如果你不使用以下两个功能,就不会因为 powershell 的任何问题报错 - - `启用 JAB/JetBrains IDE 支持` - - `开机自启动` 中的 `任务计划程序` + 4. 不再使用 powershell 对鼠标样式文件夹解压缩 - 但是这也导致了 `InputTip.exe` 变大了许多,不过也只有大约 6 MB 左右 +- 所有代码完成重构 - 其他的修复和优化 ## 2.30.2 diff --git a/src/v2/InputTip.JAB.JetBrains.ahk b/src/v2/InputTip.JAB.JetBrains.ahk index c70fcc6..8aec04f 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 diff --git a/src/v2/InputTip.JAB.JetBrains.exe b/src/v2/InputTip.JAB.JetBrains.exe index 384f1d3..ccb9ff1 100644 Binary files a/src/v2/InputTip.JAB.JetBrains.exe and b/src/v2/InputTip.JAB.JetBrains.exe differ diff --git a/src/v2/InputTip.ahk b/src/v2/InputTip.ahk index 8b7bf3e..04b00bc 100644 --- a/src/v2/InputTip.ahk +++ b/src/v2/InputTip.ahk @@ -3,7 +3,6 @@ ;@AHK2Exe-SetName InputTip ;@Ahk2Exe-UpdateManifest 1 ;@AHK2Exe-SetDescription InputTip - 一个输入法状态提示工具 -A_IconTip := "当前状态: 【运行中】`nInputTip - 一个输入法状态提示工具" #Include .\utils\ini.ahk #Include .\utils\IME.ahk @@ -16,9 +15,13 @@ A_IconTip := "当前状态: 【运行中】`nInputTip - 一个输入法状态提 filename := SubStr(A_ScriptName, 1, StrLen(A_ScriptName) - 4) fileLnk := filename ".lnk" +fileDesc := "InputTip - 一个输入法状态提示工具" +A_IconTip := "【运行中】" fileDesc ; 注册表: 开机自启动 HKEY_startup := "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run" +; 是否有 powershell +has_powershell := 1 gc := { init: 0, @@ -30,6 +33,8 @@ gc := { startupGui: "", ; 设置更新检查 checkUpdateGui: "", + ; 更改用户信息 + updateUserGui: "", ; 设置输入法模式 inputModeGui: "", ; 设置光标获取模式 @@ -46,6 +51,7 @@ gc := { windowToggleGui: "", ; 设置特殊偏移量 appOffsetGui: "", + ; 设置指定应用的特殊偏移量 offsetGui: "", ; 启用 JAB/JetBrains IDE 支持 enableJABGui: "", @@ -61,26 +67,18 @@ gc := { } } +checkIni() ; 检查配置文件 + +userName := readIni("userName", A_UserName, "UserInfo") + if (A_IsCompiled) { favicon := A_ScriptFullPath - ; 生成特殊的快捷方式,它会通过任务计划程序启动 - if (!FileExist(fileLnk)) { - FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", , favicon, , , 7) - } - - ; 生成任务计划程序 - try { - 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") - powershell := 1 - } catch { - powershell := 0 - } } else { favicon := A_ScriptDir "\img\favicon.ico" TraySetIcon(favicon, , 1) } -checkIni() ; 检查配置文件 +createTaskAndLnk() checkUpdateDone() diff --git a/src/v2/InputTipCursor.zip b/src/v2/InputTipCursor.zip deleted file mode 100644 index 20f4afd..0000000 Binary files a/src/v2/InputTipCursor.zip and /dev/null differ diff --git a/src/v2/menu/JAB.ahk b/src/v2/menu/JAB.ahk index 9c764c8..1633620 100644 --- a/src/v2/menu/JAB.ahk +++ b/src/v2/menu/JAB.ahk @@ -17,7 +17,7 @@ fn_JAB(item, *) { w := info.w bw := w - g.MarginX * 2 - 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.AddEdit("xs -VScroll ReadOnly cGray 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) @@ -35,18 +35,13 @@ fn_JAB(item, *) { gc.w.enableJABGui.Destroy() gc.w.enableJABGui := "" } - SetTimer(killAppTimer, -10) + SetTimer(killAppTimer, -1) killAppTimer() { try { - RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") + killJAB(1, A_IsCompiled) 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/about.ahk b/src/v2/menu/about.ahk index 43af1f7..3df491c 100644 --- a/src/v2/menu/about.ahk +++ b/src/v2/menu/about.ahk @@ -16,16 +16,17 @@ fn_about(*) { g.AddEdit("yp ReadOnly", 'abgox') g.AddText("xs", 'QQ 账号: ') g.AddEdit("yp ReadOnly", '1151676611') - g.AddText("xs", 'QQ 群聊(交流反馈): ') + g.AddLink("xs", 'QQ 反馈交流群( 点击添加 ): ') g.AddEdit("yp ReadOnly", '451860327') - g.AddText("xs", "-------------------------------------------------------------------------------") if (info.i) { + g.AddText("xs", "-------------------------------------------------------------------------------") return g } w := info.w bw := w - g.MarginX * 2 + g.AddText("xs", "-------------------------------------------------------------------------------------") 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') diff --git a/src/v2/menu/app-offset.ahk b/src/v2/menu/app-offset.ahk index 9fdf52c..8c988fa 100644 --- a/src/v2/menu/app-offset.ahk +++ b/src/v2/menu/app-offset.ahk @@ -6,7 +6,7 @@ fn_app_offset(*) { tip: "你首先应该点击上方的「关于」查看具体的操作说明 ", list: "特殊偏移量列表", color: "cRed", - about: '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到「特殊偏移量列表」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方是「特殊偏移量列表」,可以设置指定应用在不同屏幕下的符号显示偏移量`n - 双击列表中任意应用进程,会弹出偏移量设置窗口,或者点击窗口底部按钮移除它`n`n2. 如何设置偏移量?`n - 当双击任意应用进程后,会弹出偏移量设置窗口`n - 通过屏幕标识和坐标信息,判断是哪一块屏幕,然后设置对应的偏移量`n - 偏移量的修改实时生效,你可以立即在对应窗口中看到效果`n - 如何通过坐标信息判断屏幕?`n - 假设你有两块屏幕,主屏幕在左边,副屏幕在右边`n - 那么副屏幕的左上角 X 坐标一定大于或等于主屏幕的右下角 X 坐标', + about: '1. 如何使用这个管理面板?`n`n - 上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到「特殊偏移量列表」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方是「特殊偏移量列表」,可以设置指定应用在不同屏幕下的符号显示偏移量`n - 双击列表中任意应用进程,会弹出偏移量设置窗口,或者点击窗口底部按钮移除它`n`n2. 如何设置偏移量?`n`n - 当双击任意应用进程后,会弹出偏移量设置窗口`n - 通过屏幕标识和坐标信息,判断是哪一块屏幕,然后设置对应的偏移量`n - 偏移量的修改实时生效,你可以立即在对应窗口中看到效果`n - 如何通过坐标信息判断屏幕?`n - 假设你有两块屏幕,主屏幕在左边,副屏幕在右边`n - 那么副屏幕的左上角 X 坐标一定大于或等于主屏幕的右下角 X 坐标', link: '相关链接: 关于特殊偏移量', addConfirm: "", addConfirm2: "", @@ -43,10 +43,10 @@ fn_app_offset(*) { g := createGuiOpt("InputTip - 设置特殊偏移量") text := "每次只能添加一个应用进程名称" if (useWhiteList) { - text .= "`n如果它不在白名单中,则会同步添加到白名单中" + text .= "`n如果它还不在白名单中,则会同步添加到白名单中" } g.AddText("cRed", text) - g.AddText("xs", "应用进程名称: ") + g.AddText("Section", "应用进程名称: ") if (info.i) { return g @@ -60,7 +60,7 @@ fn_app_offset(*) { e_yes(*) { exe_name := gc._exe_name.value g.Destroy() - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (!RegExMatch(exe_name, "^.*\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { if (gc.w.subGui) { gc.w.subGui.Destroy() gc.w.subGui := "" diff --git a/src/v2/menu/bw-list.ahk b/src/v2/menu/bw-list.ahk index 2366996..769244b 100644 --- a/src/v2/menu/bw-list.ahk +++ b/src/v2/menu/bw-list.ahk @@ -44,6 +44,7 @@ fn_bw_list(*) { gc._bw_list.Value := 1 writeIni("useWhiteList", 0) global useWhiteList := 0 + restartJAB() } e_no(*) { _g.Destroy() @@ -76,7 +77,7 @@ fn_bw_list(*) { tip: "你首先应该点击上方的「关于」查看具体的操作说明 ", list: "符号显示黑名单", color: "cRed", - about: '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到「符号显示黑名单」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n - 下方是「符号显示黑名单」应用进程列表,如果使用黑名单机制,它将生效`n - 双击列表中任意应用进程,就可以将它移除`n`n - 黑名单机制: 只有不在黑名单中的应用进程窗口才会显示符号`n - 使用黑名单,可能会有一些特殊窗口的兼容性问题`n - 建议使用白名单机制,最好少用黑名单机制`n`n2. 如何快速添加应用进程?`n - 每次双击应用进程后,会弹出操作窗口,需要选择添加/移除或取消`n - 如果你确定当前操作不需要取消,可以在操作窗口弹出后,按下空格键快速确认', + about: '1. 如何使用这个管理面板?`n`n - 上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到「符号显示黑名单」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方是「符号显示黑名单」应用进程列表,如果使用黑名单机制,它将生效`n - 双击列表中任意应用进程,就可以将它移除`n`n - 黑名单机制: 只有不在黑名单中的应用进程窗口才会显示符号`n - 使用黑名单,可能会有一些特殊窗口的兼容性问题`n - 建议使用白名单机制,最好少用黑名单机制`n`n2. 如何快速添加应用进程?`n`n - 每次双击应用进程后,会弹出操作窗口,需要选择添加/移除或取消`n - 如果你确定当前操作不需要取消,可以在操作窗口弹出后,按下空格键快速确认', link: '相关链接: 白名单机制', addConfirm: "是否要将", addConfirm2: "添加到「符号显示黑名单」中?", diff --git a/src/v2/menu/check-update.ahk b/src/v2/menu/check-update.ahk index 3b5ad6a..54697a6 100644 --- a/src/v2/menu/check-update.ahk +++ b/src/v2/menu/check-update.ahk @@ -5,7 +5,7 @@ fn_check_update(*) { } gc.checkUpdateDelay := checkUpdateDelay g := createGuiOpt("InputTip - 设置更新检查的间隔时间") - g.AddText("cRed", "- 单位: 分钟,默认 1440 分钟(1 天)`n- 避免程序错误,可以设置的最大范围是 0-50000 分钟`n- 如果为 0,则表示不检查版本更新`n- 如果不为 0,在 InputTip 启动后,会立即检查一次`n- 如果大于 50000,则会直接使用 50000") + g.AddText("cGray", "- 单位: 分钟,默认 1440 分钟(1 天)`n- 避免程序错误,可以设置的最大范围是 0-50000 分钟`n- 如果为 0,则表示不检查版本更新`n- 如果不为 0,在 InputTip 启动后,会立即检查一次`n- 如果大于 50000,则会直接使用 50000") g.AddText(, "每隔多少分钟检查一次更新: ") _ := g.AddEdit("yp Number Limit5") _.Value := readIni("checkUpdateDelay", 1440) diff --git a/src/v2/menu/config.ahk b/src/v2/menu/config.ahk index c423e8c..98346bc 100644 --- a/src/v2/menu/config.ahk +++ b/src/v2/menu/config.ahk @@ -12,7 +12,7 @@ fn_config(*) { } else { SetTimer(getDirTimer, -1) } - line := "-------------------------------------------------------------------------------------------------------------" + line := "------------------------------------------------------------------------------------------------------------------" createGui(changeConfigGui).Show() changeConfigGui(info) { g := createGuiOpt("InputTip - 更改配置") @@ -26,7 +26,7 @@ fn_config(*) { tab.Value := gc.tab } tab.UseTab(1) - g.AddLink("Section cRed", '你首先应该查看相关的说明文档: 官网 Github Gitee 一些常见的使用问题 ') + g.AddLink("Section cRed", '- 你应该首先查看相关的说明文档: 官网 Github Gitee 常见的使用问题 ') if (info.i) { return g @@ -34,11 +34,11 @@ fn_config(*) { w := info.w bw := w - g.MarginX * 2 + g.AddText("xs cGray", "- 如果是第一次打开菜单,建议点击上方的「其他杂项」,把配置菜单的字体调整到合适的大小`n- 所有的配置项修改会实时生效,可以立即看到最新效果,但是修改时速度不要太快`n- 特别是需要输入的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要把输入速度放慢一点") g.AddText("xs", line) - g.AddText("xs cGray", "所有的配置项修改会实时生效,可以立即看到最新效果,但是更改时速度不要太快`n比如需要输入值的配置项,输入过快可能因为响应稍慢导致最新修改丢失,需要放缓输入速度`n") - g.AddText("xs", "1. 要不要同步修改鼠标样式: ") + g.AddText("xs", "1. 是否同步修改鼠标样式: ") _ := g.AddDropDownList("w" bw / 2 " yp AltSubmit Choose" changeCursor + 1, ["【否】不要修改鼠标样式,保持原本的鼠标样式", "【是】需要修改鼠标样式,随输入法状态而变化"]) - g.AddText("xs cGray", "推荐设置为【是】,它与符号一起配合使用才是最完美的输入法状态提示方案") + g.AddText("xs cGray", "推荐设置为【是】,它与符号一起搭配使用才是最完美的输入法状态提示方案") _.Focus() _.OnEvent("Change", e_change_cursor) e_change_cursor(item, *) { @@ -91,7 +91,7 @@ fn_config(*) { } g.addText("xs", "2. 在输入光标附近显示什么类型的符号: ") - g.AddDropDownList("yp AltSubmit Choose" symbolType + 1 " w" bw / 3, ["【不】显示符号", "显示【图片】符号", "显示【方块】符号", "显示【文本】符号"]).OnEvent("Change", e_symbol_type) + 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 @@ -128,7 +128,7 @@ fn_config(*) { updateDelay() restartJAB() } - g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "单位: 毫秒,默认为 0 毫秒,表示不隐藏符号。`n当不为 0 时,此值不能小于 150,若小于 150,则使用 150。建议 500 以上。`n符号隐藏后,下次键盘操作或点击鼠标左键会再次显示符号") + 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", "后更新符号的显示位置和状态:") @@ -150,18 +150,18 @@ fn_config(*) { } ; g.AddUpDown("Range1-500", delay) - g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "单位:毫秒,默认为 50 毫秒。一般使用 1-100 之间的值。`n此值的范围是 1-500,如果超出范围则无效,会取最近的可用值。`n值越小,响应越快,性能消耗越大,根据电脑性能适当调整") + g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "单位:毫秒,默认为 50 毫秒一般使用 1-100 之间的值`n此值的范围是 1-500,如果超出范围则无效,会取最近的可用值`n值越小,响应越快,性能消耗越大,根据电脑性能适当调整") tab.UseTab(2) - g.AddText("Section", "你应该首先查看") + g.AddText("Section", "- 你应该首先查看") g.AddText("yp cRed", "鼠标样式") - g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddText("xs cGray", "- 如果要自定义鼠标样式文件夹,请先查看相关链接,然后模仿默认的鼠标样式文件夹去尝试自定义") + g.AddText("xs cGray", "- 更推荐去下载已经适配好的鼠标样式,通过点击右下角的「下载鼠标样式扩展包」") g.AddText("xs", line) - g.AddText("xs Section cGray", "可以点击「下载鼠标样式扩展包」去下载已经适配的鼠标样式") - g.AddText("xs cGray", "如果要自定义鼠标样式文件夹,请先查看相关链接,然后模仿默认的鼠标样式文件夹去尝试自定义") - g.AddText("xs", line) - g.AddText("cRed", "如果列表中显示的鼠标样式文件夹路径不是最新的,请点击左下角的「刷新此界面」") - g.AddText("xs cGray", "InputTip 会使用下方选择的鼠标样式文件夹中的鼠标样式文件,根据不同输入法状态加载对应的鼠标样式") + g.AddText("cRed", "如果下方的 3 个下拉列表中显示的鼠标样式文件夹路径不是最新的,请点击左下角的「刷新路径列表」") + g.AddText("xs cGray", "你需要将「显示形式」页面中的第一个配置「是否同步修改鼠标样式」设置为【是】") + g.AddText("xs cGray", "InputTip 就会使用下方选择的鼠标样式文件夹中的鼠标样式文件,根据不同输入法状态加载对应的鼠标样式") g.AddText("Section", "选择鼠标样式文件夹路径:") dirList := StrSplit(cursorDir, ":") if (dirList.Length = 0) { @@ -184,7 +184,7 @@ fn_config(*) { updateCursor() reloadCursor() } - g.AddButton("xs w" bw / 2, "刷新此界面").OnEvent("Click", fn_config) + 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) { @@ -203,9 +203,9 @@ fn_config(*) { } tab.UseTab(3) - g.AddText("Section", "你应该首先查看") + g.AddText("Section", "- 你应该首先查看") g.AddText("yp cRed", "图片符号") - g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddLink("yp", '的相关说明: 官网 Github Gitee') g.AddText("xs", line) symbolPicConfig := [{ config: "pic_offset_x", @@ -326,7 +326,7 @@ fn_config(*) { } } - g.AddText("xs Section cRed", "如果列表中显示的图片符号路径不是最新的,请点击左下角的「刷新此界面」") + g.AddText("xs Section cRed", "如果下方的 3 个下拉列表中显示的图片符号路径不是最新的,请点击左下角的「刷新路径列表」") g.AddText(, "选择图片符号的文件路径: ") dirList := StrSplit(picDir, ":") if (dirList.Length = 0) { @@ -362,7 +362,7 @@ fn_config(*) { _.Text := "" } } - g.AddButton("xs w" bw / 2, "刷新此界面").OnEvent("Click", fn_config) + 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) { @@ -418,10 +418,10 @@ fn_config(*) { editOpt: "Number", tip: "方块符号的宽度" }] - g.AddText("Section", "1. 你应该首先查看") + g.AddText("Section", "- 你应该首先查看") g.AddText("yp cRed", "方块符号") - g.AddLink("yp", '的相关说明: 官网 Github Gitee') - g.AddLink("xs", '2. 颜色设置为空,表示不显示对应的方块符号。 关于颜色配置') + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddLink("xs", '- 颜色设置为空,表示不显示对应的方块符号。 关于颜色配置') g.AddText("xs", line) for v in symbolBlockColorConfig { g.AddText("xs", v.tip ": ") @@ -557,10 +557,10 @@ fn_config(*) { } } tab.UseTab(5) - g.AddText("Section", "1. 你应该首先查看") + g.AddText("Section", "- 你应该首先查看") g.AddText("yp cRed", "文本符号") - g.AddLink("yp", '的相关说明: 官网 Github Gitee') - g.AddLink("xs", '2. 文本字符可以设置为空,表示不显示对应的文本字符。 关于颜色配置') + g.AddLink("yp", '的相关说明: 官网 Github Gitee') + g.AddLink("xs", '- 文本字符可以设置为空,表示不显示对应的文本字符。 关于颜色配置') g.AddText("xs", line) symbolTextConfig := [{ config: "CN_Text", @@ -763,7 +763,7 @@ fn_config(*) { writeIni("gui_font_size", value) global fontOpt := ["s" value, "微软雅黑"] } - g.AddEdit("xs ReadOnly cGray -VScroll w" bw, "取值范围: 5-30,超出范围的值无效,建议 12-20。`n如果觉得配置菜单的字体太大或太小,可以适当调整这个值,重新打开配置菜单即可。") + 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, "获取窗口进程信息") @@ -783,7 +783,7 @@ fn_config(*) { } gc.timer := 1 - gc._window_info.Text := "停止获取" + gc._window_info.Text := "停止获取窗口进程信息" SetTimer(statusTimer, 25) statusTimer() { diff --git a/src/v2/menu/cursor-mode.ahk b/src/v2/menu/cursor-mode.ahk index e5995c4..70d1d76 100644 --- a/src/v2/menu/cursor-mode.ahk +++ b/src/v2/menu/cursor-mode.ahk @@ -218,13 +218,13 @@ fn_cursor_mode(*) { g := createGuiOpt("InputTip - 设置光标获取模式") text := "每次只能添加一个应用进程名称" if (useWhiteList) { - text .= "`n如果它不在白名单中,则会同步添加到白名单中" + text .= "`n如果它还不在白名单中,则会同步添加到白名单中 " } g.AddText("cRed", text) - g.AddText("xs", "应用进程名称: ") + g.AddText("Section", "应用进程名称: ") gc._exe_name := g.AddEdit("yp", "") gc._exe_name.Value := v - g.AddText("xs cGray", "要将这个应用进程添加到哪一个光标获取模式中?") + g.AddText("xs cGray", "你想要将它添加到哪一个光标获取模式中?") if (info.i) { return g @@ -242,7 +242,7 @@ fn_cursor_mode(*) { to := item._mode exe_name := gc._exe_name.value g.Destroy() - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (!RegExMatch(exe_name, "^.*\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { if (gc.w.subGui) { gc.w.subGui.Destroy() gc.w.subGui := "" @@ -338,7 +338,7 @@ fn_cursor_mode(*) { gc.LV_add.ModifyCol(2, "AutoHdr") 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.AddEdit("ReadOnly -VScroll w" w, '1. 如何使用这个管理面板?`n`n - 上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到下方任意列表中`n - 如果需要更多的进程,请点击下方的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击下方的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方分别是 InputTip 的多种光标获取模式`n - 不用在意这些模式是啥,只要记住,哪个能用,就用哪个即可`n - 如果很想了解相关内容,请查看下方相关链接`n - 这几个模式列表中的应用进程会使用对应的模式尝试去获取光标位置`n - 双击列表中任意应用进程,就可以将它移除或者添加到其他列表中`n - 白名单机制下,选择添加且此应用不在白名单中,则会同步添加到白名单中`n`n2. 什么时候需要去添加?`n`n - 当你发现一个应用窗口,无法获取到光标位置,或者有兼容性问题时`n - 就可以尝试将其添加到下方的各个列表中,看哪个模式是可用的且无兼容性问题的`n - 如果所有模式都不可用,则表示在此窗口中获取不到光标位置,暂时无法解决`n - 如果已知都不可用,记得移除这个应用进程`n`n3. JetBrains 系列 IDE`n`n - JetBrains 系列 IDE 需要添加到「JAB」列表中`n - 如果未生效,请检查是否完成「启用 JAB/JetBrains IDE 支持」中的所有操作步骤') g.AddLink(, '相关链接: 关于光标获取模式') g.OnEvent("Close", fn_close) fn_close(*) { diff --git a/src/v2/menu/input-mode.ahk b/src/v2/menu/input-mode.ahk index a8a3a21..d60bc66 100644 --- a/src/v2/menu/input-mode.ahk +++ b/src/v2/menu/input-mode.ahk @@ -34,7 +34,7 @@ fn_input_mode(*) { 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.AddEdit("xs ReadOnly cGray w" w, "输入法模式只有【通用】和【自定义】,这里显示的模式会根据实际的配置情况自动变化") g.AddText("xs", "2. 设置获取输入法状态的超时时间: ") timeout := g.AddEdit("yp Number Limit5") timeout.Focus() @@ -49,8 +49,8 @@ fn_input_mode(*) { restartJAB() } 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 Choose" useShift + 1, ["【否】(慎重选择)", "【是】"]) gc.useShift.OnEvent("Change", e_useShift) e_useShift(item, *) { @@ -65,8 +65,8 @@ fn_input_mode(*) { g := createGuiOpt() g.AddText(, "确定要使用【否】吗?") - g.AddText("cRed", "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘(ENG)或部分特殊输入法中,可能会导致状态提示间歇性错误。") - g.AddText("cRed", "建议不要使用【否】,而是启用 Shift 切换状态,这也是几乎所有输入法的默认设置。") + g.AddText("cRed", "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】`n如果选择【否】,在美式键盘(ENG)或部分特殊输入法中,可能会导致状态提示间歇性错误") + g.AddText("cRed", "建议不要使用【否】,而是启用 Shift 切换状态,这也是几乎所有输入法的默认设置") if (info.i) { return g @@ -95,7 +95,7 @@ fn_input_mode(*) { restartJAB() } } - g.AddEdit("xs ReadOnly cGray -VScroll w" w, "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】。`n如果选择【否】,在美式键盘(ENG)或部分特殊输入法中,可能会导致状态提示间歇性错误。") + g.AddEdit("xs ReadOnly cGray -VScroll w" w, "除非你的输入法自定义了切换状态的按键,且禁用了 Shift 切换,才需要选择【否】`n如果选择【否】,在美式键盘(ENG)或部分特殊输入法中,可能会导致状态提示间歇性错误") tab.UseTab(2) g.AddText("Section ReadOnly cRed -VScroll w" w, "首先需要点击上方的「关于自定义」标签页,查看帮助说明,了解如何设置") @@ -103,13 +103,13 @@ fn_input_mode(*) { g.AddText("xs cGray", "输入框中有值的或规则有勾选的,取其中优先级最高的生效`n如果都没有设置或勾选,则自动变回【通用】模式,反之变为【自定义】模式") g.AddText("Section", "以哪一种状态作为判断依据: ") - g.AddDropDownList("yp Choose" baseStatus + 1, ["英文状态", "中文状态"]).OnEvent("Change", e_changeBaseStatus) + 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 + v.value := Trim(item.text) } } gc.statusText := [] @@ -225,17 +225,17 @@ fn_input_mode(*) { handle_mode(item.value, "evenConversionMode", "oddConversionMode", 1) } - gc.status_btn := g.AddButton("xs w" w, "【显示】实时的状态码和切换码") + 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() { @@ -251,7 +251,8 @@ fn_input_mode(*) { } tab.UseTab(3) - 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.AddText("cRed", "下方以讯飞,小狼毫(rime),手心,小鹤音形,ENG(美式键盘)这几种输入法进行举例说明`n你需要完整阅读整个帮助说明,看完之后,你自然就知道应该如何设置了") + g.AddEdit("Section r12 ReadOnly w" w, "1. 如何进行设置?(选择英文状态作为判断依据)`n - 首先以【讯飞输入法】为例`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`n2. 关于配置项「以哪一种状态作为判断依据」`n - 需要根据实际情况选择合适的值`n - 上方的这几个例子,是围绕英文状态来设置的`n - 如果你需要围绕中文状态来设置,你就需要选择中文状态`n - 以【小鹤音形输入法】为例`n - 它的状态码始终为 1,而切换码在英文时为 257,中文时为 1025`n - 因此,将 257 填入切换码即可`n - 但是如果你同时使用多个输入法,比如它和【ENG 美式键盘】`n - 而【ENG 美式键盘】的切换码为 1,这就没有办法兼顾这两个输入法`n - 这时,就可以换个思路,选择以中文状态为判断依据`n - 将 1025 填入切换码后,【小鹤音形输入法】能正常识别`n - 切换到【ENG 美式键盘】时,由于切换码不等于 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/pause-key.ahk b/src/v2/menu/pause-key.ahk index b09aeb5..c9511e6 100644 --- a/src/v2/menu/pause-key.ahk +++ b/src/v2/menu/pause-key.ahk @@ -3,7 +3,7 @@ fn_pause_key(*) { gc.w.pauseHotkeyGui.Destroy() gc.w.pauseHotkeyGui := "" } - line := "----------------------------------------------------------------------------------" + line := "------------------------------------------------------------------------------------" createGui(pauseKeyGui).Show() pauseKeyGui(info) { g := createGuiOpt("InputTip - 设置暂停/运行快捷键的快捷键") @@ -13,7 +13,6 @@ fn_pause_key(*) { g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") g.AddText("xs", "2. 直接按下快捷键即可设置,除非快捷键被占用,需要使用「手动输入快捷键」") g.AddText("xs", "3. 使用 Backspace(退格键) 或 Delete(删除键) 可以清除快捷键") - g.AddText("xs", "4. 通过勾选右边的 Win 键来表示快捷键中需要加入 Win 修饰键`n" line) if (info.i) { return g @@ -21,6 +20,7 @@ fn_pause_key(*) { w := info.w bw := w - g.MarginX * 2 + g.AddText("xs", "4. 通过勾选右边的 Win 键来表示快捷键中需要加入 Win 修饰键`n" line) g.AddText("xs", "设置") g.AddText("yp cRed", "暂停/运行") g.AddText("yp", "的快捷键: ") diff --git a/src/v2/menu/startup.ahk b/src/v2/menu/startup.ahk index f6b7930..2730225 100644 --- a/src/v2/menu/startup.ahk +++ b/src/v2/menu/startup.ahk @@ -1,6 +1,10 @@ fn_startup(item, *) { global isStartUp if (isStartUp) { + if (gc.w.updateUserGui) { + gc.w.updateUserGui.Destroy() + gc.w.updateUserGui := "" + } try { FileDelete(A_Startup "\" fileLnk) } @@ -46,8 +50,7 @@ fn_startup(item, *) { createGui(startupGui).Show() startupGui(info) { g := createGuiOpt("InputTip - 设置开机自启动") - g.AddLink(, '详情请查看: 关于开机自启动') - g.AddText(, "---------------------------------------------------------------------") + g.AddLink(, '详情请查看: 关于开机自启动`n---------------------------------------------------------------------') if (info.i) { return g @@ -55,40 +58,41 @@ fn_startup(item, *) { 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") + g.AddEdit("xs ReadOnly -VScroll w" bw, "1. 下方有多种方式设置开机自启动,请选择有效的方式`n2. 如果你不希望每次启动都弹出管理员授权(UAC)窗口:`n - 将系统设置中的「更改用户账户控制设置」修改为【从不通知】`n - 或者通过下方的「任务计划程序」设置开机自启动") if (A_IsAdmin) { btnOpt := '' tip := '' } else { btnOpt := ' Disabled ' - tip := ' (以管理员模式运行时可用)' + tip := ' (非管理员身份运行时不可用)' } - if (!btnOpt && !powershell) { - btn := g.AddButton("Disabled w" w btnOpt, "使用「任务计划程序」 (无法调用 powershell)") + if (!btnOpt && !has_powershell) { + btn := g.AddButton("Disabled w" bw btnOpt, "「任务计划程序」(无法调用 powershell)") } else { - btn := g.AddButton("w" w btnOpt, "使用「任务计划程序」" tip) + btn := g.AddButton("xs w" bw btnOpt, "「任务计划程序」" tip) } btn.Focus() btn.OnEvent("Click", e_useTask) e_useTask(*) { + fn_update_user() 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`"", fileDesc, favicon, , , 7) fn_handle() } - btn := g.AddButton("w" w, "使用应用快捷方式") + btn := g.AddButton("xs w" bw, "应用快捷方式") if (!A_IsAdmin) { btn.Focus() } btn.OnEvent("Click", e_useLnk) e_useLnk(*) { isStartUp := 2 - FileCreateShortcut(A_ScriptFullPath, A_Startup "\" fileLnk, , , , favicon, , , 7) + FileCreateShortcut(A_ScriptFullPath, A_Startup "\" fileLnk, , , fileDesc, favicon, , , 7) fn_handle() } - g.AddButton("w" w btnOpt, "使用「注册表」" tip).OnEvent("Click", e_useReg) + g.AddButton("xs w" bw btnOpt, "「注册表」" tip).OnEvent("Click", e_useReg) e_useReg(*) { isStartUp := 3 try { diff --git a/src/v2/menu/switch-key.ahk b/src/v2/menu/switch-key.ahk index a08ed8a..bbb112f 100644 --- a/src/v2/menu/switch-key.ahk +++ b/src/v2/menu/switch-key.ahk @@ -3,7 +3,7 @@ fn_switch_key(*) { gc.w.switchKeyGui.Destroy() gc.w.switchKeyGui := "" } - line := "----------------------------------------------------------------------------------------" + line := "--------------------------------------------------------------------------------------------" createGui(keyGui).Show() keyGui(info) { g := createGuiOpt("InputTip - 设置强制切换输入法状态的快捷键") @@ -12,7 +12,7 @@ fn_switch_key(*) { g.AddText("Section", "1.") g.AddText("yp cRed", "快捷键设置不会实时生效,需要点击「确定」后生效") g.AddText("xs", "2. LShift 指的是左边的 Shift 键,RShift 指的是右边的 Shift 键,其他按键以此类推") - g.AddText("xs", "3. 单键不会覆盖原本的按键功能,因为在设置的单键抬起时才会触发强制切换") + g.AddText("xs", "3. 使用单键不会覆盖原本的按键功能,因为是在单键抬起时才会触发强制切换") if (info.i) { return g @@ -20,7 +20,7 @@ fn_switch_key(*) { w := info.w bw := w - g.MarginX * 2 - g.AddText("xs", "3. 如果要移除快捷键,请选择「无」`n" line) + g.AddText("xs", "4. 如果要移除快捷键,请选择「无」`n" line) keyConfigList := [{ config: "hotkey_CN", tip: "中文状态", diff --git a/src/v2/menu/switch-window.ahk b/src/v2/menu/switch-window.ahk index 18a574b..c9a3dfb 100644 --- a/src/v2/menu/switch-window.ahk +++ b/src/v2/menu/switch-window.ahk @@ -268,14 +268,13 @@ fn_switch_window(*) { g := createGuiOpt("InputTip - 设置状态自动切换") text := "每次只能添加一个应用进程名称" if (useWhiteList) { - text .= "`n如果它不在白名单中,则会同步添加到白名单中" + text .= "`n如果它还不在白名单中,则会同步添加到白名单中" } g.AddText("cRed", text) - g.AddText("xs", "应用进程名称: ") + g.AddText("Section", "应用进程名称: ") gc._exe_name := g.AddEdit("yp") gc._exe_name.Value := v g.AddText("xs cGray", "你想要将它添加到哪个自动切换列表中?") - if (info.i) { return g } @@ -298,7 +297,7 @@ fn_switch_window(*) { _handle(to) { exe_name := gc._exe_name.value g.Destroy() - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (!RegExMatch(exe_name, "^.*\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { if (gc.w.subGui) { gc.w.subGui.Destroy() gc.w.subGui := "" @@ -393,7 +392,7 @@ fn_switch_window(*) { gc.LV_add.ModifyCol(2, "AutoHdr") gc.LV_add.ModifyCol(3, "AutoHdr") tab.UseTab(2) - g.AddEdit("ReadOnly -VScroll w" w, "如何使用这个管理面板?`n`n- 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n- 为了便于操作,白名单中的应用进程也会添加到列表中`n- 双击列表中任意应用进程,就可以将其添加到下方任意列表中`n- 如果需要更多的进程,请点击下方的「显示更多进程」以显示后台和隐藏进程`n- 也可以点击下方的「通过输入进程名称手动添加」直接添加进程名称`n- 下方分别是中文、英文、大写锁定这三个自动切换列表`n- 在自动切换列表中的应用窗口被激活时,会自动切换到对应的输入法状态`n- 双击列表中任意应用进程,就可以将它移除或者添加到其他列表中`n- 白名单机制下,选择添加且此应用不在白名单中,则会同步添加到白名单中`n`n- 举个例子: `n - 你可以双击上方正在运行的应用进程列表中的其中一个应用进程`n - 然后在弹出的操作窗口中,选择将其添加到哪一个列表中`n - 添加完成后,会在下方对应列表中显示,并实时生效`n - 你也可以双击下方列表中的其中一个应用进程进行同样的操作") + g.AddEdit("ReadOnly -VScroll w" w, "1. 如何使用这个管理面板?`n`n - 上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 为了便于操作,白名单中的应用进程也会添加到列表中`n - 双击列表中任意应用进程,就可以将其添加到下方任意列表中`n - 如果需要更多的进程,请点击下方的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击下方的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方分别是中文、英文、大写锁定这三个自动切换列表`n - 在自动切换列表中的应用窗口被激活时,会自动切换到对应的输入法状态`n - 双击列表中任意应用进程,就可以将它移除或者添加到其他列表中`n - 白名单机制下,选择添加且此应用不在白名单中,则会同步添加到白名单中`n`n2. 需要特别注意:`n - 自动切换生效的前提是当前选择的输入法可以切换状态`n - 以【美式键盘 ENG】为例`n - 它只有英文状态和大写锁定,所以只有英文状态的和大写锁定的自动切换有效") g.OnEvent("Close", fn_close) fn_close(*) { diff --git a/src/v2/menu/tray-menu.ahk b/src/v2/menu/tray-menu.ahk index 576e15c..b3b6e6d 100644 --- a/src/v2/menu/tray-menu.ahk +++ b/src/v2/menu/tray-menu.ahk @@ -18,6 +18,8 @@ makeTrayMenu() { A_TrayMenu.Check("开机自启动") } A_TrayMenu.Add("设置更新检查", fn_check_update) + A_TrayMenu.Add("更改用户信息", fn_update_user) + A_TrayMenu.Add() A_TrayMenu.Add("设置输入法模式", fn_input_mode) A_TrayMenu.Add("设置光标获取模式", fn_cursor_mode) A_TrayMenu.Add("符号显示黑/白名单", fn_bw_list) @@ -51,13 +53,44 @@ makeTrayMenu() { A_TrayMenu.Add("退出", fn_exit) } +fn_update_user(*) { + if (gc.w.updateUserGui) { + gc.w.updateUserGui.Destroy() + gc.w.updateUserGui := "" + } + createGui(updateUserGui).Show() + updateUserGui(info) { + g := createGuiOpt() + g.AddText("cRed", "- 如果是域用户,用户名需要添加域`n- 如: xxx\abgox") + g.AddText(, "用户名: ") + _ := g.AddEdit("yp") + g.AddText("xs ReadOnly cGray", "设置完成后,关闭此窗口即可") + if (info.i) { + return g + } + + _._config := "userName" + _.Value := readIni("userName", A_UserName, "UserInfo") + _.Focus() + _.OnEvent("Change", fn_change) + + g.OnEvent("Close", createTaskAndLnk) + fn_change(item, *) { + global userName := readIni("userName", A_UserName, "UserInfo") + writeIni("userName", item.value, "UserInfo") + } + gc.w.updateUserGui := g + return g + } +} + fn_exit(*) { - RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") + killJAB() ExitApp() } -fn_restart(flag := 0, *) { - if (flag || enableJABSupport) { - RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") +fn_restart(*) { + if (enableJABSupport) { + killJAB() } Run(A_ScriptFullPath) } @@ -257,7 +290,7 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { g := createGuiOpt("InputTip - " tipList.tab[1]) text := "每次只能添加一个应用进程名称" if (useWhiteList) { - text .= "`n如果它不在白名单中,则会同步添加到白名单中" + text .= "`n如果它还不在白名单中,则会同步添加到白名单中" } g.AddText("cRed", text) g.AddText("xs", "应用进程名称: ") @@ -274,7 +307,7 @@ fn_common(tipList, handleFn, addClickFn := "", rmClickFn := "", addFn := "") { e_yes(*) { exe_name := gc._exe_name.value g.Destroy() - if (!RegExMatch(exe_name, "^.+\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { + if (!RegExMatch(exe_name, "^.*\.\w{3}$") || RegExMatch(exe_name, '[\\/:*?\"<>|]')) { if (gc.w.subGui) { gc.w.subGui.Destroy() gc.w.subGui := "" @@ -435,7 +468,7 @@ fn_white_list(*) { tip: "你首先应该点击上方的「关于」查看具体的操作说明 ", list: "符号显示白名单", color: "cRed", - about: '1. 如何使用这个管理面板?`n - 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 双击列表中任意应用进程,就可以将其添加到「符号显示白名单」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n - 下方是「符号显示白名单」应用进程列表,如果使用白名单机制,它将生效`n - 双击列表中任意应用进程,就可以将它移除`n`n - 白名单机制: 只有在白名单中的应用进程窗口才会显示符号`n - 建议使用白名单机制,这样可以精确控制哪些应用进程窗口需要显示符号`n - 使用白名单机制,只需要添加常用的窗口,可以减少一些特殊窗口的兼容性问题`n - 如果选择了白名单机制,请及时添加你需要使用的应用进程到白名单中`n`n2. 如何快速添加应用进程?`n - 每次双击应用进程后,会弹出操作窗口,需要选择添加/移除或取消`n - 如果你确定当前操作不需要取消,可以在操作窗口弹出后,按下空格键快速确认', + about: '1. 如何使用这个管理面板?`n`n - 上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n - 双击列表中任意应用进程,就可以将其添加到「符号显示白名单」中`n - 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程`n - 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称`n`n - 下方是「符号显示白名单」应用进程列表,如果使用白名单机制,它将生效`n - 双击列表中任意应用进程,就可以将它移除`n`n - 白名单机制: 只有在白名单中的应用进程窗口才会显示符号`n - 建议使用白名单机制,这样可以精确控制哪些应用进程窗口需要显示符号`n - 使用白名单机制,只需要添加常用的窗口,可以减少一些特殊窗口的兼容性问题`n - 如果选择了白名单机制,请及时添加你需要使用的应用进程到白名单中`n`n2. 如何快速添加应用进程?`n`n - 每次双击应用进程后,会弹出操作窗口,需要选择添加/移除或取消`n - 如果你确定当前操作不需要取消,可以在操作窗口弹出后,按下空格键快速确认', link: '相关链接: 白名单机制', addConfirm: "是否要将", addConfirm2: "添加到「符号显示白名单」中?", @@ -454,6 +487,40 @@ fn_white_list(*) { } } +/** + * 创建任务计划程序和快捷方式 + */ +createTaskAndLnk(*) { + if (A_IsAdmin) { + try { + Run('powershell -NoProfile -Command $action = New-ScheduledTaskAction -Execute "`'\"' A_ScriptFullPath '\"`'";$principal = New-ScheduledTaskPrincipal -UserId "' userName '" -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") + if (A_IsCompiled) { + if (isDiff("C:\WINDOWS\system32\schtasks.exe")) { + FileCreateShortcut("C:\WINDOWS\system32\schtasks.exe", fileLnk, , "/run /tn `"abgox.InputTip.noUAC`"", fileDesc, favicon, , , 7) + } + } else { + if (isDiff(A_ScriptFullPath)) { + FileCreateShortcut(A_ScriptFullPath, fileLnk, , , fileDesc, favicon, , , 7) + } + } + } catch { + global has_powershell := 0 + } + } else { + if (isDiff(A_ScriptFullPath)) { + FileCreateShortcut(A_ScriptFullPath, fileLnk, , , fileDesc, favicon, , , 7) + } + } + + isDiff(new) { + if (!FileExist("InputTip.lnk")) { + return 1 + } + FileGetShortcut("InputTip.lnk", &old) + return new != old + } +} + /** * 解析鼠标样式文件夹目录,并生成目录列表 * @returns {Array} 目录路径列表 @@ -508,12 +575,17 @@ getPicDir() { } /** * 启动 JAB 进程 - * @returns {Integer} 1/0: 是否存在错误 + * @returns {1|0} 1/0: 是否存在错误 */ runJAB() { - if (!powershell && enableJABSupport) { - writeIni("enableJABSupport", "0") + if (!has_powershell && enableJABSupport) { + if (isStartUp = 1) { + global isStartUp := 0 + writeIni("isStartUp", 0) + A_TrayMenu.Uncheck("开机自启动") + } global enableJABSupport := 0 + writeIni("enableJABSupport", 0) A_TrayMenu.Uncheck("启用 JAB/JetBrains IDE 支持") if (A_IsCompiled) { try { @@ -521,7 +593,6 @@ runJAB() { } } - if (gc.w.subGui) { gc.w.subGui.Destroy() gc.w.subGui := "" @@ -529,7 +600,7 @@ runJAB() { createGui(errGui).Show() errGui(info) { g := createGuiOpt("InputTip - powershell 调用失败!") - g.AddText("cRed", "- 在当前系统环境中,尝试调用 powershell 失败了`n-「启用 JAB/JetBrains IDE 支持」这个功能将会被自动禁用") + g.AddText("cRed", "- 在当前系统环境中,尝试调用 powershell 失败了`n- 以下功能会被自动禁用`n -「开机自启动」中的「任务计划程序」`n -「启用 JAB/JetBrains IDE 支持」") g.AddText("cRed", "- 如果你想继续使用它,你需要解决 cmd 调用 powershell 失败的问题") if (info.i) { @@ -546,21 +617,35 @@ runJAB() { } return 1 } - FileInstall("InputTip.JAB.JetBrains.exe", "InputTip.JAB.JetBrains.exe", 1) - SetTimer(runAppTimer, 50) + if (A_IsCompiled && !FileExist("InputTip.JAB.JetBrains.exe")) { + FileInstall("InputTip.JAB.JetBrains.exe", "InputTip.JAB.JetBrains.exe", 1) + } + SetTimer(runAppTimer, -1) 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") + RunWait('powershell -NoProfile -Command $action = New-ScheduledTaskAction -Execute "`'\"' A_ScriptDir '\InputTip.JAB.JetBrains.exe\"`'";$principal = New-ScheduledTaskPrincipal -UserId "' 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") + Run('schtasks /run /tn "abgox.InputTip.JAB.JetBrains"', , "Hide") } - Run('schtasks /run /tn "abgox.InputTip.JAB.JetBrains"', , "Hide") } else { Run(A_ScriptDir "\InputTip.JAB.JetBrains.exe", , "Hide") } } return 0 } +/** + * 停止 JAB 进程 + * @param {1|0} wait 等待停止进程 + * @param {0|1} delete 停止进程后,是否需要删除进程文件 + */ +killJAB(wait := 1, delete := 0) { + cmd := 'taskkill /f /im InputTip.JAB.JetBrains.exe' + try { + wait ? RunWait(cmd, , "Hide") : Run(cmd, , "Hide") + } + if (delete) { + try { + FileDelete("InputTip.JAB.JetBrains.exe") + } + } +} diff --git a/src/v2/utils/check-version.ahk b/src/v2/utils/check-version.ahk index 0e0c3c7..ec4fc21 100644 --- a/src/v2/utils/check-version.ahk +++ b/src/v2/utils/check-version.ahk @@ -42,7 +42,9 @@ checkVersion(currentVersion, callback, urls := [ } info.version := newVersion info.url := url - callback(newVersion, url) + try { + callback(newVersion, url) + } } } } @@ -127,28 +129,26 @@ checkUpdate(init := 0, once := false) { e_yes(*) { g.Destroy() releases := [ - "https://inputtip.pages.dev/releases/v2/InputTip.exe", "https://gitee.com/abgox/InputTip/releases/download/v" newVersion "/InputTip.exe", + "https://inputtip.pages.dev/releases/v2/InputTip.exe", "https://github.com/abgox/InputTip/releases/download/v" newVersion "/InputTip.exe" ] done := false for v in releases { try { - Download(v, A_AppData "\abgox-InputTip.exe") + Download(v, A_AppData "\abgox-InputTip-new-version.exe") ; 尝试获取版本号,成功获取则表示下载没有问题 - done := FileGetVersion(A_AppData "\abgox-InputTip.exe") + done := FileGetVersion(A_AppData "\abgox-InputTip-new-version.exe") break } } if (done) { if (enableJABSupport) { - try { - RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") - FileDelete("InputTip.JAB.JetBrains.exe") - } + killJAB(1, A_IsCompiled) } try { - Run("powershell -NoProfile -Command $i=1;while (Get-Process | Where-Object { $_.Path -eq '" A_ScriptFullPath "' }) { Start-Sleep -Milliseconds 500;i++;if($i -gt 30){break}};Move-Item -Force '" A_AppData "\abgox-InputTip.exe' '" A_ScriptDir "\" A_ScriptName "';''| Out-File '" A_AppData "\.abgox-InputTip-update-version.txt' -Force;Start-Process '" A_ScriptDir "\" A_ScriptName "'", , "Hide") + FileInstall("utils\update.exe", A_AppData "\abgox-InputTip-update-version.exe") + Run(A_AppData "\abgox-InputTip-update-version.exe " A_ScriptName " " A_ScriptFullPath) ExitApp() } catch { done := false @@ -298,7 +298,7 @@ checkUpdate(init := 0, once := false) { * 当更新完成时弹出提示框 */ checkUpdateDone() { - if (FileExist(A_AppData "\.abgox-InputTip-update-version.txt")) { + if (FileExist(A_AppData "\.abgox-InputTip-update-version-done.txt")) { try { _ := IniRead("InputTip.ini", "Config-v2", "JetBrains_list") writeIni("cursor_mode_JAB", _) @@ -389,7 +389,8 @@ checkUpdateDone() { return g } try { - FileDelete(A_AppData "\.abgox-InputTip-update-version.txt") + FileDelete(A_AppData "\.abgox-InputTip-update-version-done.txt") + FileDelete(A_AppData "\abgox-InputTip-update-version.exe") } } } diff --git a/src/v2/utils/options.ahk b/src/v2/utils/options.ahk index 5d90fe8..2940577 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.31.0 -currentVersion := "2.31.0" +;@AHK2Exe-SetVersion 2.32.0 +currentVersion := "2.32.0" diff --git a/src/v2/utils/update.ahk b/src/v2/utils/update.ahk new file mode 100644 index 0000000..49e8dff --- /dev/null +++ b/src/v2/utils/update.ahk @@ -0,0 +1,13 @@ +#Requires AutoHotkey v2.0 +#SingleInstance Force +#Warn All, Off +ListLines 0 +KeyHistory 0 + +try { + RunWait('taskkill /f /im ' A_Args[1], , "Hide") + FileDelete(A_Args[2]) + FileMove(A_AppData "\abgox-InputTip-new-version.exe", A_Args[2]) + IniWrite("", A_AppData "\.abgox-InputTip-update-version-done.txt", "") + Run(A_Args[2]) +} diff --git a/src/v2/utils/update.exe b/src/v2/utils/update.exe new file mode 100644 index 0000000..52967e4 Binary files /dev/null and b/src/v2/utils/update.exe differ diff --git a/src/v2/utils/var.ahk b/src/v2/utils/var.ahk index 7d2f0f1..7953f7a 100644 --- a/src/v2/utils/var.ahk +++ b/src/v2/utils/var.ahk @@ -318,7 +318,8 @@ updateSymbol(init := 0) { { ; 图片字符 for state in ["CN", "EN", "Caps"] { - if (symbolConfig.%state "_pic"%) { + pic_path := symbolConfig.%state "_pic"% + if (pic_path) { _ := symbolGui.%state% := Gui("-Caption AlwaysOnTop ToolWindow LastFound", "abgox-InputTip-Symbol-Window") __ := symbolConfig.enableIsolateConfigPic @@ -327,7 +328,9 @@ updateSymbol(init := 0) { 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"%) + try { + _.AddPicture("w" w " h" h, pic_path) + } } } } @@ -347,11 +350,11 @@ updateSymbol(init := 0) { } bt := __ ? symbolConfig.%"border_type" state% : symbolConfig.border_type + _.Opt("-LastFound") switch bt { - case 1: _.Opt("-LastFound +e0x00000001") - case 2: _.Opt("-LastFound +e0x00000200") - case 3: _.Opt("-LastFound +e0x00020000") - default: _.Opt("-LastFound") + case 1: _.Opt("+e0x00000001") + case 2: _.Opt("+e0x00000200") + case 3: _.Opt("+e0x00020000") } } } @@ -399,6 +402,7 @@ loadSymbol(state, left, top) { global lastSymbol, isOverSymbol static old_left := 0, old_top := 0 if (left = old_left && top = old_top) { + ; XXX: 如果鼠标一直悬浮在符号上,同时有键盘操作,就会出现符号闪烁 if (state = lastSymbol || (isOverSymbol && A_TimeIdleKeyboard > leaveDelay)) { return } @@ -470,7 +474,7 @@ pauseApp(*) { if (A_IsPaused) { A_TrayMenu.Uncheck("暂停/运行") TraySetIcon("InputTipSymbol/default/favicon.png", , 1) - A_IconTip := "当前状态: 【运行中】`nInputTip - 一个输入法状态提示工具" + A_IconTip := "【运行中】" fileDesc reloadSymbol() if (enableJABSupport) { runJAB() @@ -478,10 +482,10 @@ pauseApp(*) { } else { A_TrayMenu.Check("暂停/运行") TraySetIcon("InputTipSymbol/default/favicon-pause.png", , 1) - A_IconTip := "当前状态: 【已暂停】`nInputTip - 一个输入法状态提示工具" + A_IconTip := "【已暂停】" fileDesc hideSymbol() if (enableJABSupport) { - RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") + killJAB(0) } } Pause(-1) @@ -489,18 +493,14 @@ pauseApp(*) { restartJAB() { static done := 1 if (done && enableJABSupport) { - SetTimer(restartAppTimer, -10) + SetTimer(restartAppTimer, -1) restartAppTimer() { done := 0 - RunWait('taskkill /f /t /im InputTip.JAB.JetBrains.exe', , "Hide") - if (!powershell) { - return - } + killJAB(1, 0) 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") + Run('schtasks /run /tn "abgox.InputTip.JAB.JetBrains"', , "Hide") } - Run('schtasks /run /tn "abgox.InputTip.JAB.JetBrains"', , "Hide") } else { Run(A_ScriptDir "\InputTip.JAB.JetBrains.exe", , "Hide") } diff --git a/src/v2/utils/verify-file.ahk b/src/v2/utils/verify-file.ahk index 3b72457..af32e03 100644 --- a/src/v2/utils/verify-file.ahk +++ b/src/v2/utils/verify-file.ahk @@ -172,6 +172,8 @@ checkIni() { if (!FileExist("InputTip.ini")) { gc.init := 1 + userName := readIni("userName", A_UserName, "UserInfo") + ; 输入法模式 mode := readIni("mode", 1, "InputMethod") @@ -202,7 +204,7 @@ checkIni() { g := Gui("AlwaysOnTop") g.SetFont(fz, "微软雅黑") g.AddText(, "你真的确定要修改鼠标样式吗?") - g.AddText("cRed", "请谨慎选择,如果误点了确定,恢复鼠标样式需要以下步骤: `n 1. 点击「托盘菜单」=>「更改配置」`n 2. 将「1. 要不要同步修改鼠标样式」的值更改为【否】") + g.AddText("cRed", "请谨慎选择,如果误点了确定,恢复鼠标样式需要以下步骤: `n 1. 点击「托盘菜单」=>「更改配置」`n 2. 将「1. 是否同步修改鼠标样式」的值更改为【否】") if (info.i) { return g @@ -241,7 +243,9 @@ checkIni() { return g } while (isContinue) { - Sleep(500) + try { + Sleep(500) + } } createGui(listTipGui).Show() listTipGui(info) { diff --git a/src/v2/version.txt b/src/v2/version.txt index bafceb3..7cca401 100644 --- a/src/v2/version.txt +++ b/src/v2/version.txt @@ -1 +1 @@ -2.31.0 +2.32.0