2015-03-25 4 views
0

Я нахожу свой путь вокруг AppleScriptObjC и нашел полезную информацию от Everyday AppleScriptObjC от Shane Stanley. Но мне все еще сложно узнать, с чего начать с NSPasteboard.Как я могу прочитать буфер обмена с помощью AppleScriptObjC и NSPasteboard

Вот что я до сих пор:

use AppleScript version "2.4" 
use framework "Foundation" 
use framework "AppKit" 
use scripting additions 

on readClipboard(theClipboard) 
    set theClipboard to current application's NSPasteboard 
    return theClipboard as text 
end readClipboard 

set theContents to missing value 
its readClipboard(theContents) 

Конечно, это не работает. Но, похоже, он что-то делает.

возвращает:

error "Can’t make «class ocid» id «data optr000000002852F974FF7F0000» into type text." number -1700 from «class ocid» id «data optr000000002852F974FF7F0000» to text 

Все указатели будут весьма благодарны.

+0

Любая причина не только с помощью команды 'clipboard' стандартные добавки? – foo

+0

Я должен был задать вопрос о том, как извлекать конкретные данные программы из буфера обмена и читать их как текст. 'clipboard' этого не делает. – user3803526

ответ

0

NSPasteboard - это контейнер, который способен хранить много разных предметов различного вида. Существует несколько стандартных картона, определенных как NSGeneralPboard, NSRulerPboard или NSDragPboard. Для действий копирования и вставки используется общий картон.
Элемент, хранящийся внутри общего картона, может отличаться. В картотеке можно хранить public.rtf, public.jpeg и т. Д..

Собираем все вместе мы получим это решение:

set theClipboard to current application's NSPasteboard's generalPasteboard's stringForType:(current application's NSPasteboardTypeString) 

развлекаться, Michael/Hamburg

+0

Ницца. Это чрезвычайно полезно. Что делать, если в буфере обмена есть конкретный элемент приложения, например 'com.apple.flexo.proFFPasteboardUTI'? Как указать, что UTI и как я читаю его как текст? Будет ли это каким-то образом включать метод readOptionsForType? – user3803526

+0

Это зависит от того, как данные записываются в буфер обмена. Большинство команд-c-операций записывают более одного изображения данных в буфер обмена. Пример. Если вы выберете файл внутри Finder, будет скопирован сам файл, а также путь к файлу. Если вы вставляете его в Finder, он использует этот файл, если вы вставляете его в Outlook, он вставляет путь к файлу. Я мог представить, что ваше приложение также заполняет строковое значение! – ShooTerKo

+0

Это данные Final Cut Pro X, и, насколько я могу судить по использованию [ClipboardViewer] (https://developer.apple.com/library/mac/samplecode/ClipboardViewer/Introduction/Intro.html), есть только один элемент в буфере обмена. Кажется, это в основном xml. – user3803526