Service Cocoa调用服务,不覆盖粘贴板

Service Cocoa调用服务,不覆盖粘贴板,service,Service,我已经在Cocoa中创建了一个服务,它会抓取所选文本并将结果发送回我的主应用程序,因此我可以处理它。找不到任何其他方法来获取当前选择,现在该服务工作并出现在“服务”菜单中,我尝试从父应用程序调用该服务以获取当前选择,在四处张望之后,我发现了这个片段: NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName]; [pboard declareTypes:[NSArray arrayWithObject:NSStringPb

我已经在Cocoa中创建了一个服务,它会抓取所选文本并将结果发送回我的主应用程序,因此我可以处理它。找不到任何其他方法来获取当前选择,现在该服务工作并出现在“服务”菜单中,我尝试从父应用程序调用该服务以获取当前选择,在四处张望之后,我发现了这个片段:

NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
    NSPerformService(@"PCB", pboard);
这一个在触发我的服务时起作用,这里的问题是它重新定义了NSPasteboard,因此我的服务不会获得所选文本,而是一个空的零值Pasteboard,我如何防止这种情况

有人知道如何将.service捆绑包转换为.app捆绑包,该捆绑包会自动执行并发送数据,并在完成后自行终止吗


thx帮助

您想获取在另一个应用程序中选择的文本,对吗?可能在前端应用程序中,而您的应用程序在后台

要使其工作,您必须让前端应用程序调用该服务。如果您在后台从应用程序调用它,它将无法访问包含所选文本的前端应用程序文本字段。相反,它会尝试在你自己的应用程序的响应链中找到一个文本字段,我相信——如果我在这个细节上错了,有人会纠正我

但是为了让你的代码在应用程序的进程中运行,你必须以某种方式注入它,这是出于安全考虑,OSX主要禁止的,尤其是沙盒应用程序

有几种方法可以完成代码注入,1Password和其他流行工具通过osax扩展使用这种方法。但这是一个完全不同的话题

一旦您的代码在另一个应用程序的进程中运行,您应该能够复制所选文本,前提是它是一个具有[NSTextView writeSelectionToPasteboard:types:]的Cocoa应用程序。不过我自己还没有测试过,所以这只是一个假设