可可(Swift)模拟键盘按压

oknrviil  于 9个月前  发布在  Swift
关注(0)|答案(1)|浏览(112)

我正在制作一个macOS应用程序,它应该从服务器获取一些字符串,然后将字符串粘贴到当前关注的应用程序中。为了实现这一点,我使用粘贴板,然后使用CGEvent模拟CMD + V按键

func copyToClipboard(_ string: String) {
    let pasteboard = NSPasteboard.general
    pasteboard.clearContents()
    pasteboard.setString(string, forType: .string)
}

func simulateCmdVKeyPress() {
    let source = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)

    // Command Key Down
    if let cmdKeyDown = CGEvent(keyboardEventSource: source, virtualKey: 0x37, keyDown: true) {
        cmdKeyDown.flags = CGEventFlags.maskCommand
        cmdKeyDown.post(tap: CGEventTapLocation.cghidEventTap)
    }

    // 'V' Key Down and Up
    if let vKeyDown = CGEvent(keyboardEventSource: source, virtualKey: 0x09, keyDown: true),
       let vKeyUp = CGEvent(keyboardEventSource: source, virtualKey: 0x09, keyDown: false) {
        vKeyDown.flags = CGEventFlags.maskCommand
        vKeyDown.post(tap: CGEventTapLocation.cghidEventTap)
        vKeyUp.post(tap: CGEventTapLocation.cghidEventTap)
    }

    // Command Key Up
    if let cmdKeyUp = CGEvent(keyboardEventSource: source, virtualKey: 0x37, keyDown: false) {
        cmdKeyUp.post(tap: CGEventTapLocation.cghidEventTap)
        Thread.sleep(forTimeInterval: 0.1) // Small delay to ensure Command key state is cleared
    }
}

字符串
在沙盒模式下,它工作正常。但是当我归档和解压缩应用程序时,它停止工作。看起来像是缺少了某些权限或权利。在发布模式下,无论是在沙盒模式下还是没有沙盒模式下,它都无法工作。请帮助。

pbpqsu0x

pbpqsu0x1#

我已经找到了导致它的原因。我只是从不同的文件夹运行发行版应用。这是不可能的授予相同的辅助功能权限在两个不同的文件夹中的同一个应用。因此,当您授予辅助功能权限位于特定文件夹中的应用,然后从不同的文件夹运行具有相同bundle ID的应用,第二个人不会获得可访问权限,甚至永远不会要求它。

相关问题