【问题标题】:Copy Selected Text with Swift使用 Swift 复制选定的文本
【发布时间】:2016-01-19 00:08:19
【问题描述】:

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

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

【问题讨论】:

    标签: copy swift2 nspasteboard


    【解决方案1】:

    NSPasteboard 类用于在粘贴板上放置/获取信息。据我了解,您希望将另一个应用程序中当前选择的文本转换为应用程序中的字符串。实现此目的的辅助功能 API。

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

    【讨论】:

    • 完全正确,这就是我想做的。但我无法转换 Objective-C 代码。我可能需要寻找 CGEventCreateKeyboardEvent 的 swift 等价物。它不喜欢该代码块中给出的任何标识符。
    • 看看stackoverflow.com/questions/27484330/… - 它正在做类似的事情并且是用 Swift 编写的(尽管 Swift 2 可能仍然存在一些差异)。 github.com/pikajude/Maxxxro/blob/master/Maxxxro/… 也有类似的代码,您可能想看看。
    【解决方案2】:

    想通了!

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

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2015-02-25
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 2012-12-07
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多