LINUX.ORG.RU

Эмулировать нажатие комбинации клавиш

 , ,


0

1

Здравствуйте! Если тут есть люди, разбирающиеся в программировании под мак, очень прошу написать пример кода, который эмулирует нажатие Command+C для окна в фокусе, затем забирает текст из буфера обмена. В общем задача в том, чтобы получить выделенный текст из текущего окна. Может быть это можно сделать как-то проще\лучше? И да, сделать это нужно на С++ (будет использоваться в Qt приложении). Я бы поковырялся сам, да мака у меня нет, а документацию найти что-то не могу.



Последнее исправление: beastie (всего исправлений: 1)

Если окно в твоем процессе, то вроде послать copy: в NSApp, дальше само по респондерам дойдет, а если нет, то не знаю, может и никак — текстовые ячейки только по своему желанию в pasteboard данные кладут.

arturpub ★★
()
Ответ на: комментарий от flareguner

У меня где-то был код, который создавал апплскрипт и заставлял его открыть новое письмо в майлере. Завтра с утра скину, может адаптируется для меню-едит-копи. Но придется этот модуль написать на объективе.

arturpub ★★
()
Ответ на: комментарий от arturpub
- (void)newMailWithSubject:(NSString *)subject content:(NSString *)content
{
    subject = [subject stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
    subject = [subject stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];

    content = [content stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
    content = [content stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];

    NSString *template = (@"tell application \"Mail\"\n"
                          @"    make new outgoing message with properties { visible:true, subject:\"%@\", content:\"%@\" }\n"
                          @"    activate\n"
                          @"end tell\n");
    NSString *source = [[NSString alloc] initWithFormat:template, subject, content];

    NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];

    NSDictionary *errorDictionary = nil;
    [script executeAndReturnError:&errorDictionary];

    if (errorDictionary) {
        [[NSApplication sharedApplication] presentError:[[NSError alloc] initWithDomain:[[NSBundle mainBundle] bundleIdentifier]
                                                                                   code:0
                                                                               userInfo:@{ NSLocalizedDescriptionKey: [errorDictionary description] }]];
    }
}

Это для ARC.

arturpub ★★
()

тебе надо фрагмент текста обработать? Так погляди в строну «Служб текстовых», могу даже показать как нибудь. Позвони мне в скайпе.

MikeDM ★★★★★
()
Ответ на: комментарий от andreyu

К сожалению апплскрипта нет для цепепе, но для особо упоротых всегда есть objc_msgSend ;)

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.