Mon application Mac OS X reçoit un fichier sur le réseau (dans ce cas, text/x-vcard). Dans mon code, comment puis-je ouvrir l'application associée (généralement le carnet d'adresses) sans chemins d'accès codés en dur ou nom d'application afin qu'il traite le fichier?Dans mon code comment lancer l'application responsable d'un UTI
Répondre
Vous pourrez faire cela en liant dans l'infrastructure ApplicationServices, qui a une fonction très pratique "LSCopyApplicationForMIMEType". Cela fonctionne comme ceci:
CFURLRef appURL = nil;
OSStatus err = LSCopyApplicationForMIMEType(CFSTR("text/x-vcard"), kLSRolesAll, &appURL);
if (err != kLSApplicationNotFoundErr) {
NSLog(@"URL: %@", (NSURL *)appURL);
}
CFRelease(appURL);
Je vais expliquer ce que signifient les paramètres. Le premier paramètre est un CFStringRef du type MIME que vous recherchez. Le deuxième paramètre indique le type d'application que vous recherchez, c'est-à-dire une application qui peut modifier ce fichier, ou une application qui peut afficher ce fichier, etc. kLSRolesAll signifie que vous ne vous en souciez pas. Le dernier paramètre est un pointeur vers CFURLRef où la fonction va coller l'URL de l'application (si elle peut en trouver un).
Sur ma machine, ceci affiche sur:
2009-08-01 12:38:58.159 EmptyFoundation[33121:a0f] URL: file://localhost/Applications/Address%20Book.app/
L'une des choses cool sur CFURLRefs est qu'ils sont pontés NSURL sans frais. Cela signifie que vous pouvez prendre un CFURLRef et le convertir en un NSURL, et vice versa. Une fois que vous avez votre NSURL de l'application, il est assez trivial d'utiliser quelque chose comme NSWorkspace -launchApplicationAtURL: options: configuration: error: méthode pour ouvrir l'application.
Si vous souhaitez ouvrir un fichier spécifique dans cette application (comme le fichier dont vous avez obtenu le type MIME), vous pouvez utiliser quelque chose comme - [NSWorkspace openFile: withApplication:].
Si vous ne pouvez pas obtenir le type MIME (malgré ce que vous dites dans votre question), il existe un tas de fonctions LaunchServices similaires. You can read all about them here.
Plutôt que de prendre la peine d'essayer de trouver l'application, vous pouvez utiliser LSOpenItemsWithRole.
//Opens items specified as an array of values of type FSRef with a specified role.
OSStatus LSOpenItemsWithRole (
const FSRef *inItems,
CFIndex inItemCount,
LSRolesMask inRole,
const AEKeyDesc *inAEParam,
const LSApplicationParameters *inAppParams,
ProcessSerialNumber *outPSNs,
CFIndex inMaxPSNCount
);
- 1. Lancer la procédure stockée Oracle dans le code Java
- 2. JiBX: Comment continuer à utiliser les interfaces dans mon code?
- 3. Comment lancer gdb avec -quiet dans xcode
- 4. Comment utiliser l'indenteur eclipse de mon code?
- 5. Comment lancer mon propre programme en utilisant une commande dans Shell?
- 6. Comment lancer mon application ruby en utilisant la bibliothèque d'extension ruby (en c), dans windows?
- 7. Comment attraper la création de fichier et l'appelant responsable
- 8. Comment rationaliser mon code - UIImage imageNamed:
- 9. Comment puis-je savoir dans quel module mon code s'exécute?
- 10. Devrais-je utiliser DuplicateKeyException dans mon propre code non-LINQ?
- 11. Comment lancer une URL dans monodevelop C#?
- 12. Comment puis-je lancer 'cpan' dans emacs?
- 13. Lancer les rapports Reporting Services à partir du code .Net
- 14. Lancer l'éditeur de contenu à partir du code
- 15. meilleure structure de mon code
- 16. PHP affiche mon code source?
- 17. Pourquoi @SuppressWarnings casse mon code?
- 18. Comment lancer cette interface générique?
- 19. Comment lancer com.apple.tools.info-plist-utility?
- 20. Comment lancer QVariant en classe personnalisée?
- 21. comment puis-je lancer une activité directement à partir de mon activité
- 22. Comment lancer l'appareil photo iPhone sur viewDidLoad?
- 23. Comment lancer une session d'assistance à distance dans .NET?
- 24. Comment lancer un clavier à l'écran à partir de mon application sur Mac OSX?
- 25. Non Lancer erreurs dans une bibliothèque JavaScript
- 26. Crypter mon cadre et le code
- 27. Comment obtenir le handle de module de mon propre code?
- 28. Comment éliminer ces dépendances d'ordre de mon code
- 29. Comment puis-je tester mon code antispam contre les bots?
- 30. comment lancer du CRT en java?
Merci! C'est exactement ce dont j'ai besoin. –