You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用数组检测活动窗口是否属于指定程序列表并实现快捷键替换?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:15:04