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

Monterey下NSSecureTextField聚焦时Hammerspoon无法唤起应用至前台

问题根因

这是macOS Monterey新增的窗口安全限制:当NSSecureTextField类型的密码输入框处于聚焦状态时,WindowServer会拦截两类进程的前台申请:

  1. 进程自身未开启安全文本模式
  2. 进程的前台申请不是由直接用户交互触发

解决方案

方案1:修改keuze源码开启安全文本模式(推荐,无兼容问题)

Apple在Carbon框架中提供的EnableSecureEventInput()接口虽然已标注过时,但在Monterey及后续系统中仍可正常生效,调用后即可让你的keuze进程在安全输入模式下获得前台权限。
操作步骤:

  1. 在keuze的applicationDidFinishLaunching回调(或窗口显示前的逻辑中)添加如下代码:
#include <Carbon/Carbon.h>

// 调用后即可开启安全文本模式
EnableSecureEventInput();
  1. 编译时链接Carbon框架:Xcode项目在「Build Phases - Link Binary With Libraries」中添加Carbon.framework,如果用命令行编译则在编译参数中添加-framework Carbon
  2. 重新编译生成keuze二进制即可,不需要修改现有Hammerspoon配置

方案2:不修改keuze,调整Hammerspoon配置主动前置窗口

Hammerspoon本身已经拥有辅助功能权限,你可以在启动keuze后,通过Hammerspoon的API主动将keuze窗口前置,绕开限制。
修改后的按键绑定代码如下:

hs.hotkey.bind({"alt", "shift"}, "i", function()
    local output, status, exit_type, rc = hs.execute("~/src/keuze/build/Release/keuze", false)
    -- 新增逻辑:找到keuze进程并激活到前台
    local keuzeApp = hs.appfinder.appFromName("keuze")
    if keuzeApp then
        keuzeApp:activate()
    end
    if status then
      hs.eventtap.keyStrokes(trim(output))
    end
end)

注意事项

两种方案都不需要额外添加权限,只要确保Hammerspoon已经被添加到「系统偏好设置>安全性与隐私>隐私>辅助功能」列表中即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:15:06