如何用数组检测活动窗口是否属于指定程序列表并实现快捷键替换?
解决AutoHotkey数组判断活动窗口的问题
修正后的完整代码
^c:: ; 替换系统默认的Ctrl+C热键 ; 定义高级编辑器的窗口匹配规则数组 AdvancedEditors := ["ahk_exe WindowsTerminal.exe", "ahk_exe Code.exe"] ; 标记当前窗口是否属于高级编辑器,默认不匹配 isAdvanced := false ; 遍历数组逐一检查活动窗口 for _, winTitle in AdvancedEditors { if WinActive(winTitle) { isAdvanced := true break ; 找到匹配项后立即终止循环 } } ; 根据匹配结果发送对应快捷键 SendInput, % isAdvanced ? "^x" : "^c" return
关键问题修正说明
- 热键调整为
^c:::直接替换系统默认的Ctrl+C行为,而非示例中的空格键,贴合你的需求场景。 - 数组遍历逻辑:
WinActive()无法直接接收数组参数,必须通过for循环逐个校验数组内的窗口规则,确保准确判断当前活动窗口是否在目标列表中。 - 简化发送逻辑:使用三元运算符精简代码,根据标记直接决定发送Ctrl+X还是Ctrl+C。
扩展优化方案
如果需要针对基础编辑器(如记事本)单独定义行为,可以补充如下逻辑:
^c:: AdvancedEditors := ["ahk_exe WindowsTerminal.exe", "ahk_exe Code.exe"] BasicEditors := ["ahk_exe Notepad.exe"] isAdvanced := false for _, winTitle in AdvancedEditors { if WinActive(winTitle) { isAdvanced := true break } } isBasic := false for _, winTitle in BasicEditors { if WinActive(winTitle) { isBasic := true break } } ; 针对不同类型窗口发送对应指令 if (isAdvanced) { SendInput, ^x } else if (isBasic) { SendInput, ^c ; 基础编辑器保留默认Ctrl+C行为 } else { SendInput, ^c } return
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

