2011-03-24 3 views
5

Simplement: comment obtenir l'image du compte de l'utilisateur? J'utilise Cocoa sur Mac.Get User Account Image

+0

Quelle langue utilisez-vous? –

+0

@Radek Pro-Grammer: "Cocoa" signifie qu'il utilise Objective-C. –

+2

@Dave DeLong: c'est faux pour au moins 100%. Les bindings Ruby et Python sont disponibles, et Assembly est également une option. –

Répondre

7

Le carnet d'adresses la méthode ne fonctionne pas si l'utilisateur supprime la vcard.

J'utilise la CBIdentity méthode qui ne se casse, comme Dave dit:

+ (NSImage *)userImage 
{ 
    CBIdentity *identity = [CBIdentity identityWithName:NSUserName() authority:[CBIdentityAuthority defaultIdentityAuthority]]; 
    return [identity image]; 
} 

Pour utiliser CBIdentity vous devez ajouter le Cadre de collaboration à vos objectifs et utiliser les éléments suivants comprennent la directive

#import <Collaboration/Collaboration.h> 
+1

quand j'utilise ceci, je reçois un zéro pour '[image d'identité]', mais mon image est un petit gâteau dans les Préférences Système:/ –

+0

Y at-il un moyen d'être averti si l'image change? – uchuugaka

3

Si vous pouvez obtenir un handle vers un CSIdentityRef ou un CBIdentity* représentant l'utilisateur en question, vous pouvez appeler la méthode -[CBIdentity image] pour récupérer l'image de leur compte.

Edit:

Voici une réponse précédente de la mine qui montre comment interroger pour tous les comptes d'utilisateur standard sur un système et les convertir en CBIdentity objets: Get all Users on OS X

Si vous ne souhaitez pas lier contre Collaboration.framework, alors vous pouvez utiliser quelque chose comme CSIdentityImageGetData (ou l'une des variantes similaires) pour obtenir l'image directement. Personnellement, je trouve que travailler avec un objet Cocoa natif est plus agréable, mais dans ce cas, ce n'est pas absolument nécessaire.

+0

Je suis désolé, mais après avoir fait des recherches un peu, je ne sais pas encore comment coder cela? –

+0

@magikseb a modifié la réponse –

+0

Y at-il un moyen d'être averti si l'image a changé? Le rappel de la requête CSIdentity ne semble pas remarquer de changements à l'image – uchuugaka

4

Si vous ne voulez une image pour l'utilisateur connecté, il est également possible d'obtenir avec une seule ligne en utilisant AddressBook:

NSData *imgData = [[[ABAddressBook sharedAddressBook] me] imageData]; 

mais je crois que ce n'est pas garantie être Identique à l'image de connexion.

+0

Oui, je veux vraiment l'image du compte utilisateur (image de connexion), et pas seulement l'image du profil du carnet d'adresses de l'utilisateur, si possible. Merci quand même –

+0

@magikseb Alors je m'attends à ce que la méthode de Dave soit la bonne façon de procéder, c'est pourquoi j'ai voté! :) –

+0

+1 en passant par le carnet d'adresses est une idée très intéressante. Je ne sais pas si c'est ce que l'OP veut, mais c'est un bon endroit pour chercher des infos. –