Я пишу поповер меню бар приложение в OS X.Копирование выделенного текста с Swift
Цель состоит в том, чтобы скопировать выделенный текст текущего активного приложения (не мой поповер) в мое приложение, так что я могу использовать его как строка.
Я пишу поповер меню бар приложение в OS X.Копирование выделенного текста с Swift
Цель состоит в том, чтобы скопировать выделенный текст текущего активного приложения (не мой поповер) в мое приложение, так что я могу использовать его как строка.
Понял это!
ПРИМЕЧАНИЕ. Вам необходимо отложить функцию вставки. 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 станет активным/сфокусированным окном.
Класс NSPasteboard используется для размещения/получения информации на картоне. Насколько я понимаю, вы хотите, чтобы выбранный текст в другом приложении был добавлен в строку в вашем приложении. API Accessibility для этого.
Вы можете отправить ключи другому приложению, чтобы вы могли отправить Cmd-C другому приложению, а затем вытащить данные из картона. Пример этого в obj-c можно найти here
.
Это точно, это то, что я хочу сделать. Но я не могу получить код Objective-C для преобразования. Возможно, мне нужно будет найти быстрый эквивалент CGEventCreateKeyboardEvent. Он не похож ни на один из идентификаторов, указанных в этом блоке кода. – Aaron
Взгляните на http://stackoverflow.com/questions/27484330/simulate-keypress-using-swift - он делает аналогичную вещь и написан в Swift (хотя все же могут быть некоторые отличия для Swift 2). Также есть код на https://github.com/pikajude/Maxxxro/blob/master/Maxxxro/ButtonPusher.swift, который вы можете посмотреть. – Michael