1

OS X でポップオーバー メニュー バー アプリを作成しています。

目標は、現在アクティブなアプリケーション (ポップオーバーではない) の選択されたテキストをアプリにコピーして、文字列として使用できるようにすることです。

4

2 に答える 2

2

NSPasteboard クラスは、ペーストボードに情報を配置/取得するために使用されます。私が理解しているように、別のアプリケーションで現在選択されているテキストをアプリケーションの文字列に取得したいと考えています。これを実現するアクセシビリティ API。

キーを別のアプリケーションに送信できるので、Cmd-C を別のアプリケーションに送信し、ペーストボードからデータを取得できます。obj-c でのこの例を見つけることができますhere

于 2016-01-19T00:43:22.683 に答える
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
}

ViewController ではなく、AppDelegate.swift から呼び出しています。私のポップオーバーがアクティブ/フォーカスされたウィンドウになる前にテキストをコピーすることを願っています。

于 2016-01-21T15:42:10.037 に答える