Comment obtenir le nom complet de l'utilisateur connecté (celui qu'il / elle est entré comme son vrai nom) à l'aide de Windows API ou autre chose? Par exemple, comment obtenir "John Smith", pas "John" (comme son nom d'utilisateur). P>
getansername (...) Ne fait pas le travail car il renvoie le nom d'utilisateur, pas le nom complet. P>
6 Réponses :
Eh bien, si l'utilisateur n'a jamais été entré, il n'y a aucun moyen pour vous de l'obtenir. Vous pouvez rechercher des programmes de messagerie installés et leur demander poliment pour les informations, mais c'est une mauvaise idée pour plusieurs raisons. P>
Voici votre meilleur tir: obtenez le nom de l'utilisateur saisi lors de l'enregistrement de la copie de Windows. Ceci est dans le registre. L'emplacement exact diffère entre les versions Windows, mais dans des versions récentes, il est à là-bas, vous trouverez le propriétaire nominal, lequel est censé entrer le nom. Évidemment, s'il s'agit d'un ordinateur de société et que la machine a été créée par elle, il est très courant de trouver une chaîne de société normalisée là-bas. Et, bien sûr, beaucoup de gens vont entrer des noms comme «Joe Sixpack» ou «fissuré par Quartex». Cependant, c'est aussi proche que possible. P> HKEY_LOCAL_MACHINE \ logiciel \ Microsoft \ Windows NT \ CurrentVersion CODE> (et dans Windows 95/98 / ME, à HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ Courroversion code>). P>
Merci pour ça. Je développe dans un environnement de la société pour que le propriétaire de la société est défini sur "IT-Management".
Un rapide Google révèle que NETUSERGETTINFO A > devrait faire cela. Cela ne ressemble pas à l'API la plus facile du monde à utiliser. P>
Je pense que le niveau que vous avez après est 10, qui retourne un user_info_10 structure, contenant, entre autres, un Assurez-vous de vous souvenir de libérer la structure lorsque vous avez terminé, en utilisant NetapibufferFree ! p> usri10_full_name code>. p>
Utile si vous êtes dans un environnement en réseau ... mais la question peut également poser la question sur les postes de travail simples.
Les API "Net" ne sont que des emballages autour de l'API de Security Compte Manager (SAM) et ils ne sont pas seulement pour une utilisation liée au réseau. La plupart des gens voudront fonctionner sur la base de données SAM locale.
J'ai du mal à utiliser NettuserGetInfo car il souhaite que son paramètre. NettuserGetInfo retourne nerr_usernotfound quand je nourris mon nom d'utilisateur.
J'ai trouvé des endroits dans le registre Windows avec mon email ou mon nom complet: p>
Le premier nécessite évidemment installer Microsoft Office et que l'utilisateur a entré son nom dans les paramètres de bureau. Les deuxième et troisième sont plus fiables mais contiennent un courrier électronique mais le courrier électronique est également bon (ou mieux) identification que le nom complet. P>
Avez-vous essayé GetUserNameEx (NameDisplay , ...)? P>
J'ai réussi à obtenir le nom complet de l'utilisateur avec cette fonction! Merci. D'une manière ou d'une autre, je n'ai trouvé pas trouvé getansernameex (..) quand je suis d'abord examiné ce problème. J'ai créé un système de sauvegarde pour examiner le nom ou le courrier électronique de l'utilisateur dans le registre Windows si getansernameex (..) échoue pour une raison quelconque.
@TERMOPETTERI: GETUSERNAMEEX échouera avec erreur_not_mapped si l'utilisateur n'a pas spécifié de nom complet, dans ce cas, utilisez simplement la version non EX.
Il apparaît qu'il y a des bugs dans Getansernameex (Namedisplay), il ne fonctionne pas lorsque vous n'êtes pas sur un domaine.
Je pense avoir trouvé une réponse connexe qui fonctionne mieux que GetansernameEx seul, c'est-à-dire que je peux gérer certains cas où GetUserNameex échoue. P>
Ma réponse alternative est ici y compris le code exemple pour DELPHI. P>
En bref, si getUserInfoex (3, ...) échoue, lisez GetUserInfoex (2, ...) qui renvoie un nom dans le formulaire "Machinename \ Nom", que vous pouvez ensuite passer aux fonctions NettaSerInfo dans NetAPI32. DLL, qui lira la base de données SAM locale, qui est l'endroit où le nom complet de l'utilisateur est stocké, s'ils l'ont définie dans la base de données SAM locale. Bien sûr, de nombreux utilisateurs à domicile non domestique n'ont jamais défini cela, de sorte que les autres réponses ici sont susceptibles de fournir des notes aussi. P>
NetQueryDisplayInformation devrait aider. Le champ usri1_full_name donnera le nom complet p>
Répondit ici: Stackoverflow.com/Questtions/3686201/...
La réponse acceptée à cette question ne fonctionne pas si vous n'êtes pas sur un domaine. Voir cette question pour Solution de contournement: