我找到的唯一参考是预沙箱:
Accepting iCal events dropped on my application’s icon
注意:我认为这是使用kCoreEventClass / kAEopendocuments和kInternetEventClass / kAEGetURL的NSAppleEventManager事件处理程序实现的.
不幸的是,他们没有处理NSfilesPromisePboardType.
让我们刷新我们的粘贴板知识:粘贴板在所有应用程序之间共享.有复制,查找和拖动等任务的默认粘贴板.
当拖动开始时,应用程序将写入共享拖动粘贴板.所以我们现在需要的是关于Drop to Dock图标的通知.
这是NSService发挥作用的地方:
<key>NSServices</key><array> <dict> <key>NSMessage</key> <string>openService</string> <key>NSSendTypes</key> <array> <string>public.data</string> </array> <key>NSMenuItem</key> <dict> <key>default</key> <string>Open</string> </dict> </dict></array>
并在代码中设置它:
- (voID)applicationWillFinishLaunching:(NSNotification *)notification{ [NSApp setServicesProvIDer:self];}- (voID)openService:(NSPasteboard *)serviceBoard userData:(Nsstring *)userData error:(Nsstring **)error{}
需要注意的是,NSService粘贴板不是NSDragPboard粘贴板.
但它们都是共享的,所以我们可以访问我们想要的那个:
NSPasteboard *dragPboard = [NSPasteboard pasteboarDWithname:NSDragPboard];if ([[dragPboard types] containsObject:NSfilesPromisePboardType]){}
下一个问题是我们没有 – [NSDraggingInfo namesOfPromisedfilesDroppedAtDestination:].
#import <applicationservices/applicationservices.h>
好老碳让我们得到了保障.
PasteboardRef pboardRef = NulL; PasteboardCreate((__brIDge CFStringRef)NSDragPboard,&pboardRef); PasteboardSetPasteLocation(pboardRef,(__brIDge CFURLRef)temporaryDirectory); Nsstring *urlString = [dragPboard stringForType:(Nsstring *)kPasteboardTypefileURLPromise]; CFRelease(pboardRef);
像这里的任何其他承诺文件一样处理.
总结以上是内存溢出为你收集整理的macos – 将承诺的文件放到Dock中的应用程序图标上全部内容,希望文章能够帮你解决macos – 将承诺的文件放到Dock中的应用程序图标上所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)