API Какао, чтобы установить приложение по умолчанию для файла, чтобы открыть с - PullRequest
2 голосов
/ 12 января 2011

Существует ли API-интерфейс Cocoa или Carbon для установки приложения по умолчанию для открытия файла? Т.е., если я выбираю файл и выполняю Cmd + i, мы получаем опцию «Открыть с помощью». Здесь мы можем установить приложение по умолчанию, чтобы открыть файл. Кроме того, есть возможность применить это для всех таких файлов.

Как мне достичь того и другого программно?

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

Чтобы установить приложение по умолчанию для расширения файла (или файла UTI), см. Мой ответ здесь: https://stackoverflow.com/a/8645445/272342

1 голос
/ 12 января 2011

API для настройки приложения для каждого файла является закрытым. Для настройки приложения, которое обрабатывает тип файла, см. LSSetDefaultRoleHandlerForContentType и другие методы в Launch Services Reference.

0 голосов
/ 23 мая 2012

Для этого есть Carbon API, см. Справочник менеджера ресурсов . Вы должны создать ветку ресурса для файла, который вы хотите открыть в определенном приложении, и добавить такой ресурс (очень быстрый и грязный код):

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...