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

MacOS输入法切换工具仅状态栏变化,需切换窗口才生效问题求助

问题原因

MacOS允许每个应用独立维护自己的输入法状态,你调用的TISSelectInputSource仅修改了系统全局的输入法配置,但当前活跃的应用进程没有同步这个变更——状态栏显示的是全局状态,而当前应用仍在使用自己缓存的输入法设置,只有当窗口切换时,应用才会重新读取全局输入法状态。

修复方案

以下两种方法可以解决这个问题,任选其一即可:

方法一:强制激活当前应用窗口

在调用TISSelectInputSource后,让当前活跃应用的主窗口重新获得焦点,触发应用刷新输入法上下文:

修改Switcher.swift中的switchLang方法:

func switchLang(){
    self.lang = (self.lang + 1) % 3
    var selectedSource: TISInputSource?
    
    switch lang {
    case 0:
        selectedSource = self.kr
    case 1:
        selectedSource = self.jp
    case 2:
        selectedSource = self.en
    default:
        print("error")
        return
    }
    
    guard let source = selectedSource else { return }
    TISSelectInputSource(source)
    
    // 触发当前应用同步输入法状态
    if let frontApp = NSWorkspace.shared.frontmostApplication,
       let mainWindow = frontApp.mainWindow {
        mainWindow.makeKeyAndOrderFront(nil)
        NSApp.activate(ignoringOtherApps: false)
    }
}

方法二:模拟空键盘事件(无焦点闪烁)

如果不想出现窗口焦点闪烁的情况,可以通过发送空的键盘事件,让当前应用感知到输入法变化:

首先在Switcher.swift顶部导入CoreGraphics:

import Cocoa
import MASShortcut
import CoreGraphics // 新增导入

然后修改switchLang方法:

func switchLang(){
    self.lang = (self.lang + 1) % 3
    var selectedSource: TISInputSource?
    
    switch lang {
    case 0:
        selectedSource = self.kr
    case 1:
        selectedSource = self.jp
    case 2:
        selectedSource = self.en
    default:
        print("error")
        return
    }
    
    guard let source = selectedSource else { return }
    TISSelectInputSource(source)
    
    // 发送空按键事件触发应用更新输入法
    let pressEvent = CGEvent(keyboardEventSource: nil, virtualKey: 0, keyDown: true)
    pressEvent?.post(tap: .cghidEventTap)
    let releaseEvent = CGEvent(keyboardEventSource: nil, virtualKey: 0, keyDown: false)
    releaseEvent?.post(tap: .cghidEventTap)
}
必要权限配置

前往「系统设置」→「隐私与安全性」→「辅助功能」,勾选你的应用,否则上述方法中的窗口激活或事件发送可能无法正常工作。

内容的提问来源于stack exchange,提问作者user365200

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:40:34