Copy 使用Swift复制所选文本

Copy 使用Swift复制所选文本,copy,swift2,nspasteboard,Copy,Swift2,Nspasteboard,我正在OSX中编写一个弹出式菜单栏应用程序 目标是将当前活动应用程序(不是我的popover)的选定文本复制到我的应用程序中,以便我可以将其用作字符串。NSPasteboard类用于在粘贴板上放置/获取信息。据我所知,您希望将另一个应用程序中当前选定的文本转换为应用程序中的字符串。可访问性API可以实现这一点 您可以将密钥发送到另一个应用程序,这样就可以将Cmd-C发送到另一个应用程序,然后从粘贴板中提取数据。obj-c中有一个例子。NSPasteboard类用于在粘贴板上放置/获取信息。据我所

我正在OSX中编写一个弹出式菜单栏应用程序


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

NSPasteboard类用于在粘贴板上放置/获取信息。据我所知,您希望将另一个应用程序中当前选定的文本转换为应用程序中的字符串。可访问性API可以实现这一点


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

NSPasteboard类用于在粘贴板上放置/获取信息。据我所知,您希望将另一个应用程序中当前选定的文本转换为应用程序中的字符串。可访问性API可以实现这一点

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

找到了

注意:您必须延迟粘贴功能。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。这样它就有希望在我的popover成为活动/聚焦窗口之前复制文本。

明白了

注意:您必须延迟粘贴功能。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。这样,它就有希望在我的popover成为活动/聚焦窗口之前复制文本。

完全正确,这就是我想要做的。但是我无法转换Objective-C代码。我可能需要寻找CGEventCreateKeyboardEvent的swift等价物。它不喜欢该代码块中给出的任何标识符。请看一下-它正在做类似的事情,并且是用Swift编写的(尽管Swift 2可能仍有一些不同)。还有类似的代码,你可能想看看。这是完全正确的,这就是我想做的。但是我无法转换Objective-C代码。我可能需要寻找CGEventCreateKeyboardEvent的swift等价物。它不喜欢该代码块中给出的任何标识符。请看一下-它正在做类似的事情,并且是用Swift编写的(尽管Swift 2可能仍有一些不同)。还有一些类似的代码,你可能想看看。