Cocoa (Swift) 模拟键盘按下

问题描述 投票:0回答:1

我正在制作一个 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
    }
}

在调试中它工作正常。但是当我存档并解压该应用程序时,它停止工作。似乎缺少某些许可或权利。在发布模式下,无论是在沙盒中还是在没有沙盒的情况下,它都无法工作。请帮忙。

swift macos cocoa keyboard keyboard-events
1个回答
0
投票

我已经找到原因了。不可能为两个不同文件夹中的同一应用程序授予相同的访问权限。因此,当您向位于特定文件夹中的应用程序授予可访问权限,然后从不同的文件夹中使用相同的捆绑包 ID 运行该应用程序时,第二个应用程序将不会获得可访问权限,甚至永远不会请求它。

© www.soinside.com 2019 - 2024. All rights reserved.