2010-04-24 8 views
3

Dans mon programme Cocoa, je souhaite examiner les programmes enregistrés au démarrage et modifier cette liste comme bon me semble. Pour être compatible avec Tiger, il me semble que j'ai besoin de travailler avec AppleScript. J'ai actuellement le code suivant:Modification des éléments de connexion Mac OS X dans Objective-C via AppleScript

NSDictionary* errorDict; 
NSAppleEventDescriptor* returnDescriptor = NULL; 

NSString *appleSource = @"tell application \"System Events\"\n\ 
get every login item\n\ 
end tell"; 
NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource: appleSource]; 

returnDescriptor = [appleScript executeAndReturnError: &errorDict]; 

Si je lance cette commande dans AppleScript, je retourner un tableau d'éléments de connexion. Cependant, je n'arrive pas à comprendre comment parcourir ce tableau dans Objective-C. Plus précisément, je veux examiner les noms et les chemins des programmes enregistrés pour s'exécuter au démarrage.

Des idées?

Édition: Je l'ai compris. Voici un exemple de code. La clé utilise AEKeyword, qui sont très mal documentés. La meilleure référence est ici: http://developer.apple.com/mac/library/releasenotes/AppleScript/ASTerminology_AppleEventCodes/TermsAndCodes.html

const AEKeyword aeName = 'pnam'; 
const AEKeyword aePath = 'ppth'; 

... 

NSDictionary* errorDict; 
NSAppleEventDescriptor* getLoginItemsRD = NULL; 
NSString *getLoginItemsSrc = @"tell application \"System Events\"\n\ 
           get properties of every login item\n\ 
           end tell"; 
NSAppleScript *getLoginItemsScript = [[NSAppleScript alloc] initWithSource: getLoginItemsSrc]; 
getLoginItemsRD = [getLoginItemsScript executeAndReturnError: &errorDict]; 
[getLoginItemsScript release]; 

int i; 
int numLoginItems = [getLoginItemsRD numberOfItems]; 
for (i = 1; i <= numLoginItems; i++) 
{ 
    NSAppleEventDescriptor *loginItem = [getLoginItemsRD descriptorAtIndex:i]; 
    NSString *loginItemName = [[loginItem descriptorForKeyword:aeName] stringValue]; 
    NSString *loginItemPath = [[loginItem descriptorForKeyword:aePath] stringValue]; 
} 

Répondre

2

Apple a un code source qui peut gérer les éléments de connexion pour Tiger et plus tôt. Je crois que vous êtes censé obtenir de l'ADC, mais je l'ai trouvé flottant ici:

LoginItemAPI.h

LoginItemAPI.c