Скопируйте выделение в самом переднем приложении, используя яблочный скрипт

Я пытаюсь скопировать выделенный текст в буфер обмена в приложении Какао, используя этот код:

NSString * copyStr =@"tell application \"System Events\" to key code 8 using command down";
copyScript = [[NSAppleScript alloc] initWithSource:copyStr];
NSAppleEventDescriptor *aDescriptor = [copyScript executeAndReturnError:&errorDict];

К сожалению, ничего не происходит. Вы знаете, в чем может быть проблема?

2 ответа

Решение

Чтобы захватить выбор целевых приложений таким образом, и если он принимает команду.

Вам нужно сделать его активным приложением. Поскольку вы используете функцию копирования, подобную этой, вам не нужно добавлять блок сообщения процесса. Но есть некоторые команды GUI, которые вам не нужны, чтобы сделать целевое приложение активным и просто использовать tell application process блок. IMO это хорошая практика, чтобы использовать его..

Так что если вы решили или должны использовать имя процесса в tell application process Вы также можете использовать NSString stringWithFormat:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    [self runApplescriptCopy:@"Safari"];

}



-(void)runApplescriptCopy:(NSString*) processName{


    NSDictionary * errorDict;
    NSString * copyStr = [NSString stringWithFormat:@"tell application \"%@\"  to activate \n tell application \"System Events\" to tell application process \"%@\" to  key code 8 using command down",processName ,processName ];
    NSAppleScript * copyScript = [[NSAppleScript alloc] initWithSource:copyStr];
    NSAppleEventDescriptor *aDescriptor = [copyScript executeAndReturnError:&errorDict];


}

Вы должны действительно добавить имя процесса в блоке. (Это выписано на лету)

tell app "processname" to activate
tell app  "System Events"
    tell app process "processname"
         key code 8 using command down
    end tell
end tell
Другие вопросы по тегам