J'ai trouvé que sur Windows 7 64 bits, sur une machine avec un nom de domaine, GetUserNameEx (3, ....) qui devrait obtenir le format de nom étendu DisplayName (== 3), dans un tampon, fonctionne très bien.Comment lisez-vous le nom de l'utilisateur (prénom et nom) sur toutes les versions de Windows de manière fiable?
Toutefois, il ne fonctionne pas sur Windows 7 32 bits, vm qui est sur un groupe de travail, plutôt que sur un domaine, il renvoie ERROR_NONE_MAPPED. Comment interprétez-vous le nom convivial de la personne "Fred Smith", par exemple, d'une manière qui fonctionne sur Windows? GetUserNameEx est manifestement cassé. On m'a dit que je n'avais pas l'intention de travailler pour des utilisateurs qui ne sont pas sur un domaine. Pourquoi pas, je me le demande, puisque les informations SAM locales existent? Et il semble qu'il n'y ait aucune autre API directe pour le faire.
Si Windows vous donne ERROR_NONE_MAPPED, vous n'avez pas de chance, et probablement pas sur un domaine. Donc, ce n'est pas exactement une zone conviviale de l'API. [Il est possible, il semble, d'appeler NetUserGetInfo, pour lire les infos SAM locales, quand ce n'est pas sur un domaine, mais vous devez d'abord connaître le nom d'utilisateur et le mot de passe, puis il recherchera peut-être le nom convivial]
RElated Question: does not mention the problem here
Ma réponse fonctionne pour Delphi, la réponse de Matt fonctionne pour C#. Je retagerez ceci comme visuel C++ si quelqu'un transporte cet extrait de code au C++. –