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

Swift MacApp鼠标点击事件触发失败及沙箱截图权限相关问题

问题解答

一、鼠标左键点击失效修复

你当前的代码存在两个核心问题:

  • 缺少leftMouseDown(左键按下)事件,完整的点击事件流为「鼠标移动到目标位置→左键按下→左键抬起」,你仅发送了鼠标移动和两次左键抬起事件,自然无法触发点击。
  • 递归调用逻辑冗余,alreadyClicked全局变量控制的递归逻辑容易引发不可预期的重复调用,建议直接移除。
    修复后的代码如下:
func MouseClick(cursorLocation p0: CGPoint) {
    print("MouseClick", p0)
    // 随机延迟模拟人工操作间隔
    usleep(useconds_t(Int.random(in: 30000..<100000)))
    
    // 移动鼠标到目标位置
    MoveCursor(cursorLocation: p0)
    CGEvent(mouseEventSource: nil, mouseType: .mouseMoved, mouseCursorPosition: p0, mouseButton: .left)?.post(tap: .cghidEventTap)
    usleep(50000)
    
    // 发送左键按下事件
    CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, mouseCursorPosition: p0, mouseButton: .left)?.post(tap: .cghidEventTap)
    usleep(50000)
    
    // 发送左键抬起事件
    CGEvent(mouseEventSource: nil, mouseType: .leftMouseUp, mouseCursorPosition: p0, mouseButton: .left)?.post(tap: .cghidEventTap)
}

注意:使用CGEvent发送系统级操作需要先给App授予辅助功能权限,打开「系统偏好设置>安全性与隐私>隐私>辅助功能」,勾选你的App即可;如果是从Xcode直接启动调试,还需要同时勾选Xcode的辅助功能权限。

二、截图权限与全系统视图捕获问题

1. 读取全系统视图实现

你是自用工具不需要上架App Store,直接关闭沙箱即可解除沙箱的访问限制:
打开Xcode项目,选中Target > 切换到「Signing & Capabilities」标签 > 找到App Sandbox条目,点击左上角的减号将其移除即可。
关闭沙箱后,只要拿到屏幕录制权限就能捕获所有系统窗口的内容。

2. 永久授予截图权限

不需要每次运行都申请,手动在系统设置中配置即可:
打开「系统偏好设置>安全性与隐私>隐私>屏幕录制」,勾选你的App(调试阶段需要同时勾选Xcode),之后启动应用就不会再弹出权限申请窗口。如果配置后依然不生效,可以先删除列表中的对应条目,重新勾选后重启App即可。
macOS 11.x版本存在权限缓存异常的问题,如果配置后依然无法正常截图,重启一次设备即可修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:27:03