- Registriert
- 28.02.09
- Beiträge
- 404
Hi, ich versuche über den Service Mechanismus kEventServiceCopy den vom User selektierten Text aus einer Anwendung abzufragen. Bisher leider vergeblich, ich bekomme als content nur einen Errorcode (wie mir scheint) zurück. Da dies das erste mal ist, dass ich mich tiefer mit Coca/Carbon beschäftige, könnte jemand so nett sein und schauen, ob ich einen offensichtlichen Fehler gemacht habe? (Für den ersten Test habe ich das globale Copy&Paste Pasteboard verwendet)
Bin auch etwas der ScrapRef verwirrt. Im Netz ist leider ziemlich wenig zu finden, wie man das erfolgreich fabriziert und das kommt wirklich selten vor, dass google auch nicht weiter weiss bzgl. Programmierthemen. Danke fürs anschauen.
Code:
PasteboardRef theClipboard;
ScrapRef theScrap = nil;
OSStatus err = PasteboardCreate(kPasteboardClipboard, &theClipboard);
if (err != noErr) {
NSLog(@"failed to create clipboard reference: error %@", err);
}
else NSLog(@"Created Pasteboard");
err = PasteboardClear( theClipboard );// 1
if (err != noErr) {
NSLog(@"failed to clear clipboard reference: error %@", err);
}
else NSLog(@"Cleared Pasteboard");
int pid = 5528; // pid des prozesses, dessen selektion ich abfragen möchte
NSAppleEventDescriptor *target = [NSAppleEventDescriptor descriptorWithDescriptorType:typeKernelProcessID bytes:&pid length:sizeof(pid)];
NSAppleEventDescriptor *clipboardDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typePasteboardRef bytes:theClipboard length:sizeof(theClipboard)];
//NSAppleEventDescriptor *scrapDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeScrapRef bytes:theClipboard length:sizeof(theClipboard)];
NSLog(@"Sending Copy event");
NSAppleEventDescriptor * event = [NSAppleEventDescriptor appleEventWithEventClass:kEventClassService eventID:kEventServiceCopy targetDescriptor:target returnID:kAutoGenerateReturnID transactionID:kAnyTransactionID];
[event setParamDescriptor:clipboardDescriptor forKeyword:kEventParamPasteboardRef];
//[event setParamDescriptor:scrapDescriptor forKeyword:kEventParamScrapRef];
AppleEvent reply = { typeNull, 0L };
err = AESendMessage([event aeDesc], &reply, kAEWaitReply, kAEDefaultTimeout);
if (err != noErr) {
NSLog(@"Error sending event!");
}
else NSLog(@"Event successfully sent!");
NSAppleEventDescriptor *nsReply = [[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&reply];
NSString * content = [[nsReply descriptorAtIndex:1] stringValue];
NSLog( @"Content: %@", content);
[nsReply release];
Bin auch etwas der ScrapRef verwirrt. Im Netz ist leider ziemlich wenig zu finden, wie man das erfolgreich fabriziert und das kommt wirklich selten vor, dass google auch nicht weiter weiss bzgl. Programmierthemen. Danke fürs anschauen.