使用 Swift 复制选定的文本

Copy Selected Text with Swift

我正在 OS X 中编写弹出菜单栏应用程序。

目标是将当前活动应用程序(不是我的弹出窗口)的选定文本复制到我的应用程序中,以便我可以将其用作字符串。

NSPasteboard class 用于 put/get 粘贴板上的信息。据我了解,您想将另一个应用程序中当前选定的文本转换为您应用程序中的字符串。可实现此目的的辅助功能 API。

您可以将密钥发送到另一个应用程序,这样您就可以将 Cmd-C 发送到另一个应用程序,然后从粘贴板中提取数据。 obj-c 中的一个示例可以在 here.

中找到

想通了!

注意:您必须延迟粘贴功能。 copyText() 需要时间写入粘贴板。

func copyText() {
    // Clear pasteboard
    pasteBoard.clearContents()

    let src = CGEventSourceCreate(CGEventSourceStateID.HIDSystemState)

    //let cmdd = CGEventCreateKeyboardEvent(src, 0x37, true)
    let cmdu = CGEventCreateKeyboardEvent(src, 0x37, false)

    let c_down = CGEventCreateKeyboardEvent(src, 0x08, true)
    let c_up = CGEventCreateKeyboardEvent(src, 0x08, false)

    // Set Flags
    CGEventSetFlags(c_down, CGEventFlags.MaskCommand)
    CGEventSetFlags(c_up, CGEventFlags.MaskCommand)

    let loc = CGEventTapLocation.CGHIDEventTap

    //CGEventPost(loc, cmdd)
    CGEventPost(loc, c_down)
    CGEventPost(loc, c_up)
    CGEventPost(loc, cmdu)
}


func paste() -> String {
    let lengthOfPasteboard = pasteBoard.pasteboardItems!.count
    print(lengthOfPasteboard)
    var theText = ""
    if lengthOfPasteboard > 0 {
      theText = pasteBoard.pasteboardItems![0].stringForType("public.utf8-plain-text")!
    } else {
      theText = "Nothing Coppied"
    }

    //print(theText)
    return theText
}

我是从 AppDelegate.swift 调用的,而不是 ViewController。这样它就有希望在我的弹出框变成 active/focused window.

之前复制文本