2010-05-21 18 views
4

J'automatise une commande de copie pour placer du texte sur le carton chaque seconde ou presque - malheureusement, c'est ma seule façon d'accéder au texte, qui est dans une autre application. Après la copie, j'accède au texte du carton et le traite. Parfois, la commande de copie sera envoyée lorsque rien n'est sélectionné - par exemple dans textEdit, si le curseur se trouve à la fin d'une ligne (au lieu de surligner du texte) et que vous cliquez sur copy, vous obtenez un bip système. il n'y a rien sélectionné à copier. La table de montage ne met pas à jour et conserve ses données précédentes.Comment puis-je vérifier que le NSPasteboard est mis à jour?

Je n'arrive pas à trouver un moyen créatif d'identifier quand cela se produit. Si j'envoie une commande de copie et que la table de montage ne se met pas à jour, y a-t-il une sorte d'horodatage sur la table de travail à laquelle je peux accéder qui confirmera que quelque chose a été ou n'a pas été capturé?

Je regardais le changeCount, mais je ne suis pas sûr de ce que c'est pour exactement, et la documentation ne m'a pas aidé beaucoup - hareng rouge?

Des idées simples et efficaces reçues avec reconnaissance!

Répondre

11

Je ne crois pas qu'il existe une notification pour cela, mais vous pouvez interroger le carton.

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

+1 c'est la façon de le faire. –

+2

Veuillez ne pas interroger quoi que ce soit, sauf si vous y êtes absolument obligé. C'est inefficace de toutes les manières. – bbum

+4

Je ne suis pas en désaccord sur le fait que ce n'est pas efficace mais comment le feriez-vous autrement? –

0

copie le même fichier jpeg de plusieurs fois de bureau et vous verrez fonctionne pas exactement avec

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

parfois:

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

parfois:

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" 
) 
+0

Ceci est une information de débogage, pas une réponse. – iblamefish

+0

Mais NSStringPboardType n'apparaît pas toujours. Comment puis-je obtenir le nom du fichier JPEG sans analyser NSFilenamesPboardType –