Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa API为要打开的文件设置默认应用程序_Cocoa_File_Default - Fatal编程技术网

Cocoa API为要打开的文件设置默认应用程序

Cocoa API为要打开的文件设置默认应用程序,cocoa,file,default,Cocoa,File,Default,是否有任何Cocoa或Carbon API可用于设置打开文件的默认应用程序? i、 e如果我选择一个文件并执行Cmd+i,我们会得到一个选项“openwith”。在这里,我们可以将默认应用程序设置为打开文件。此外,还有一个选项可用于所有此类文件 如何以编程方式实现这两个目标?基于每个文件设置应用程序的API是私有的。要设置处理文件类型的应用程序,请参阅《启动服务参考》中的LSSetDefaultRoleHandlerForContentType和其他方法。要设置文件扩展名(或文件UTI)的默认应

是否有任何Cocoa或Carbon API可用于设置打开文件的默认应用程序? i、 e如果我选择一个文件并执行Cmd+i,我们会得到一个选项“openwith”。在这里,我们可以将默认应用程序设置为打开文件。此外,还有一个选项可用于所有此类文件


如何以编程方式实现这两个目标?

基于每个文件设置应用程序的API是私有的。要设置处理文件类型的应用程序,请参阅《启动服务参考》中的LSSetDefaultRoleHandlerForContentType和其他方法。

要设置文件扩展名(或文件UTI)的默认应用程序,请参阅我的回答:

要实现此目的,请参阅。您必须为要使用特定应用程序打开的文件创建一个资源分叉,并添加类似这样的资源(非常快速且肮脏的代码):

FSRef theFsRef;
CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:path];
CFURLGetFSRef(url, &theFsRef);
HFSUniStr255 fork = {0,{0}};
FSGetResourceForkName(&fork);
Handle theResHandle;
ResFileRefNum theRefFile;
ResType rType = 'usro';
ResID rID = 0;
NSMutableData *aData = [[NSMutableData alloc] init];
Byte buf[4] = {0x1A, 0x00, 0x00, 0x00};
[aData appendData:[NSData dataWithBytes:&buf length:sizeof(buf)]];
NSData *bData = [@"/Applications/Firefox.app" dataUsingEncoding:NSUTF8StringEncoding];
[aData appendData:bData];
int len = 4 + [bData length];
[aData appendData:[NSMutableData dataWithLength:(1028-len)]];
PtrToHand ([aData bytes], &theResHandle, [aData length]);
FSCreateResourceFork(&theFsRef,fork.length,fork.unicode,0);
FSOpenResourceFile(&theFsRef,fork.length,fork.unicode,fsRdWrPerm,&theRefFile);
AddResource(theResHandle, rType, rID, "\p");
WriteResource(theResHandle);
ReleaseResource(theResHandle);
UpdateResFile(theRefFile);
CloseResFile(theRefFile);