¿Cómo obtener el nombre completo del usuario registrado en Windows?

¿Cómo obtener el nombre completo del usuario registrado (el que ingresó como su nombre real) usando Windows API o alguna otra cosa? Por ejemplo, cómo obtener “John Smith”, no “john” (como si fuera su nombre de usuario).

GetUserName (…) no hace el trabajo porque devuelve el nombre de usuario, no el nombre completo.

¿ Intentó GetUserNameEx (NameDisplay, …)?

Un rápido Google revela que NetUserGetInfo debería hacer esto. No parece ser la API más fácil del mundo para usar.

Creo que el nivel que buscas es 10, que devuelve una estructura USER_INFO_10 , que contiene, entre otras cosas, un usri10_full_name .

¡Asegúrate de recordar liberar la estructura cuando haya terminado, usando NetApiBufferFree !

Bueno, si el usuario nunca lo ingresó, no hay forma de que lo obtenga. Puede buscar progtwigs de correo electrónico instalados y cortésmente pedirles la información, pero esa es una mala idea por muchas razones.

Esta es la mejor opción: obtenga el nombre que ingresó el usuario al registrar la copia de Windows. Esto está en el registro. La ubicación exacta difiere entre versiones de Windows, pero en versiones recientes, está en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion (y en Windows 95/98 / ME, en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion ).

Allí, encontrarás RegisteredOwner, que es donde se supone que debe ingresar el nombre. Obviamente, si se trata de una computadora de la empresa y la máquina fue configurada por TI, es muy común encontrar una cadena de empresa estandarizada allí. Y, por supuesto, muchas personas ingresarán nombres como “Joe Sixpack” o “Cracked by Quartex”. Sin embargo, eso es lo más cercano que puedes obtener.

He encontrado algunos lugares en el registro de Windows con mi correo electrónico o mi nombre completo:

  1. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ UserInfo tiene UserName que contiene mi nombre completo.
  2. KEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer tiene el nombre de usuario de inicio de sesión que contiene mi correo electrónico.
  3. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon tiene DefaultUserName que contiene mi correo electrónico.

El primero obviamente requiere que se instale Microsoft Office y que el usuario haya ingresado su nombre en la configuración de Office. El segundo y el tercero son más confiables pero contienen el correo electrónico en su lugar, pero el correo electrónico también es una buena (o mejor) identificación que el nombre completo.

Creo que he encontrado una respuesta relacionada que funciona mejor que GetUserNameEx solo, es decir, puedo manejar algunos casos en los que GetUserNameEx falla.

Mi respuesta alternativa es aquí, incluido el código de muestra para Delphi.

En resumen, si GetUserInfoEx (3, …) falla, lea GetUserInfoEx (2, …) que devuelve un nombre con el formato “nombre_máquina \ nombre de usuario”, que luego puede pasar a las funciones NetUserInfo en NETAPI32.dll, que leerá la base de datos SAM local, que es donde se almacena el nombre completo del usuario, si lo han establecido en la base de datos SAM local. Por supuesto, muchos usuarios domésticos que no son de dominio nunca han configurado esto, por lo que las otras respuestas aquí probablemente también brinden algunos consejos.

NetQueryDisplayInformation debería ayudar. El campo usri1_full_name dará el nombre completo