Как я могу проверить, что NSPasteboard обновлен? - PullRequest
4 голосов
/ 21 мая 2010

Я автоматизирую команду копирования, чтобы каждую секунду или около того помещать какой-либо текст на монтажную панель - к сожалению, это мой единственный способ доступа к тексту, который есть в другом приложении. После копирования я получаю доступ к тексту и обрабатываю его.

Иногда команда копирования отправляется, когда ничего не выбрано - например, в textEdit, если курсор находится в конце строки (вместо выделения текста), и вы нажимаете кнопку копирования, вы получаете системный звуковой сигнал, потому что ничего не выбрано для копирования. Картон не обновляется и сохраняет свои предыдущие данные.

Я не могу придумать творческий способ определить, когда это произойдет. Если я отправляю команду копирования, а монтажная доска не обновляется, есть ли какая-либо отметка времени на монтажной доске, к которой я могу получить доступ, которая будет подтверждать, что что-то было или не было захвачено?

Я смотрел на changeCount, но я не уверен, для чего именно, и документация мне не сильно помогла - красная сельдь?

Любые простые и эффективные идеи с благодарностью получены!

Ответы [ 2 ]

11 голосов
/ 21 мая 2010

Я не верю, что для этого существует уведомление, однако вы можете опросить монтажный картон.

pasteboard = [[NSPasteboard generalPasteboard] retain];
[NSTimer scheduledTimerWithTimeInterval:0.25 target:self
                               selector:@selector(pollPasteboard:)
                               userInfo:nil repeats:YES];

- (void)pollPasteboard:(NSTimer *)timer {
    NSInteger currentChangeCount = [pasteboard changeCount];
    if (currentChangeCount == previousChangeCount)
        return;
    NSLog(@"Pasteboard updated: %@", [pasteboard types]);
    previousChangeCount = currentChangeCount;
}
0 голосов
/ 25 мая 2014

Просто скопируйте один и тот же файл JPEG с рабочего стола несколько раз, и вы увидите, что не совсем работает с

NSLog(@"Pasteboard updated: %@", [pasteboard types]); (

иногда:

2014-05-25 12:14:20.014 PB1[65771:303] (
    "public.file-url",
    "CorePasteboardFlavorType 0x6675726C",
    "dyn.ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn",
    NSFilenamesPboardType,
    "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu",
    "Apple URL pasteboard type"
)

иногда:

2014-05-25 12:14:25.482 PB1[65771:303] (
    "public.file-url",
    "CorePasteboardFlavorType 0x6675726C",
    "dyn.ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn",
    NSFilenamesPboardType,
    "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu",
    "Apple URL pasteboard type",
    "com.apple.icns",
    "CorePasteboardFlavorType 0x69636E73",
    fccc,
    "public.utf16-external-plain-text",
    "CorePasteboardFlavorType 0x75743136",
    "public.utf8-plain-text",
    NSStringPboardType,
    "public.tiff",
    "NeXT TIFF v4.0 pasteboard type"
)
...