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

macOS 15.1 Sequoia Beta下CGEvent鼠标功能失效问题

Mac自动点击器CGEvent失效问题排查与解决

针对你在Xcode 16.0开发Mac自动点击器时遇到的CGEvent无响应问题,以下是几个针对性的排查和解决方向:

  • 检查Xcode的辅助功能权限
    直接在Xcode中运行项目时,系统会将权限请求关联到Xcode而非你的应用。前往「设置>隐私与安全性>辅助功能」,确认Xcode已被授予「控制电脑」权限。

  • 调整CGEventSource的状态ID
    尝试将事件源的stateID从.hidSystemState替换为.combinedSessionState,新系统版本中该状态ID的兼容性更好:

    let source = CGEventSource(stateID: .combinedSessionState)
    
  • 修改事件投递的Tap类型
    将事件投递的Tap类型从.cghidEventTap改为.sessionEventTap,后者更适配当前用户会话内的事件分发逻辑:

    CGEvent(mouseEventSource: source, mouseType: .leftMouseDown, mouseCursorPosition: mouseLocation, mouseButton: .left)?.post(tap: .sessionEventTap)
    
  • 替换usleep为异步延迟
    在主线程调用usleep会阻塞事件循环,导致鼠标事件无法正常投递。改用DispatchQueue实现异步延迟:

    let source = CGEventSource(stateID: .combinedSessionState)
    let mouseLocation = NSEvent.mouseLocation
    
    // 发送鼠标按下事件
    CGEvent(mouseEventSource: source, mouseType: .leftMouseDown, mouseCursorPosition: mouseLocation, mouseButton: .left)?.post(tap: .sessionEventTap)
    
    // 延迟0.1秒发送鼠标抬起事件
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        CGEvent(mouseEventSource: source, mouseType: .leftMouseUp, mouseCursorPosition: mouseLocation, mouseButton: .left)?.post(tap: .sessionEventTap)
    }
    
  • 检查输入监控权限
    部分macOS版本除了辅助功能权限,还需要「输入监控」权限支持事件模拟。前往「设置>隐私与安全性>输入监控」,确保应用或Xcode已获得该权限。

  • 测试独立打包的App
    将项目打包成独立的.app文件运行,调试环境的权限逻辑可能与正式运行环境存在差异,独立运行后再验证功能是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:27:10