Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Windows user's full name in python?

I'm trying to get the user's full name. Not the login name, but the full name that shows up on the upper right side of the start menu in Windows 7. It might only show up as the full name in an active directory setting.

os.environ['USERNAME']
win32api.GetUserName()

These both return the login name. How do I get the user's full name?

like image 910
Brian Schlenker Avatar asked Dec 12 '22 07:12

Brian Schlenker


2 Answers

A bit of googling gives me this link

and this code:

import ctypes
 
def get_display_name():
    GetUserNameEx = ctypes.windll.secur32.GetUserNameExW
    NameDisplay = 3
 
    size = ctypes.pointer(ctypes.c_ulong(0))
    GetUserNameEx(NameDisplay, None, size)
 
    nameBuffer = ctypes.create_unicode_buffer(size.contents.value)
    GetUserNameEx(NameDisplay, nameBuffer, size)
    return nameBuffer.value

Tested and works on Windows XP


As noted by OP in comment here, pywin32 wraps this same API call into a simpler function:

win32api.GetUserName(3)

GetUserName pointing to ctypes.windll.secur32.GetUserNameExW, and 3 being the same 3 as the constant from ctypes

like image 50
mhlester Avatar answered Dec 30 '22 14:12

mhlester


For more detailed information:

import ctypes
 
def get_data(EXTENDED_NAME_FORMAT: int):
    GetUserNameEx = ctypes.windll.secur32.GetUserNameExW
    data = EXTENDED_NAME_FORMAT
 
    size = ctypes.pointer(ctypes.c_ulong(0))
    GetUserNameEx(data, None, size)
 
    nameBuffer = ctypes.create_unicode_buffer(size.contents.value)
    GetUserNameEx(data, nameBuffer, size)
    return nameBuffer.value

print("NameUnknown            : ", get_data(0))
print("NameFullyQualifiedDN   : ", get_data(1))
print("NameSamCompatible      : ", get_data(2))
print("NameDisplay            : ", get_data(3))
print("NameUniqueId           : ", get_data(6))
print("NameCanonical          : ", get_data(7))
print("NameUserPrincipal      : ", get_data(8))
print("NameCanonicalEx        : ", get_data(9))
print("NameServicePrincipal   : ", get_data(10))
print("NameDnsDomain          : ", get_data(12))

example output:

NameUnknown            :  
NameFullyQualifiedDN   :  CN=Tomasevic Milovan (TomasevicM),OU=Engineering,DC=Microsoft,DC=Com
NameSamCompatible      :  Microsoft\TomasevicM
NameDisplay            :  Tomašević Milovan
NameUniqueId           :  {4fa050f0-f561-11cf-bdd9-00aa003a77b6}
NameCanonical          :  Microsoft.Com/Engineering/Tomasevic Milovan (TomasevicM)
NameUserPrincipal      :  [email protected]
NameCanonicalEx        :  Microsoft.Com/Engineering Tomasevic Milovan (TomasevicM)
NameServicePrincipal   :
NameDnsDomain          :  Microsoft.Com\TomasevicM

Constants

  • NameUnknown: An unknown name type.
  • NameFullyQualifiedDN: The fully qualified distinguished name (for example, CN=Jeff Smith,OU=Users,DC=Engineering,DC=Microsoft,DC=Com).
  • NameSamCompatible: A legacy account name (for example, Engineering\JSmith). The domain-only version includes trailing backslashes ().
  • NameDisplay: A "friendly" display name (for example, Jeff Smith). The display name is not necessarily the defining relative distinguished name (RDN).
  • NameUniqueId: A GUID string that the IIDFromString function returns (for example, {4fa050f0-f561-11cf-bdd9-00aa003a77b6}).
  • NameCanonical: The complete canonical name (for example, engineering.microsoft.com/software/someone). The domain-only version includes a trailing forward slash (/).
  • NameUserPrincipal: The user principal name (for example, [email protected]).
  • NameCanonicalEx: The same as NameCanonical except that the rightmost forward slash (/) is replaced with a new line character (\n), even in a domain-only case (for example, engineering.microsoft.com/software\nJSmith).
  • NameServicePrincipal: The generalized service principal name (for example, www/[email protected]).
  • NameDnsDomain: The DNS domain name followed by a backward-slash and the SAM user name.

Requirements

  • Minimum supported client: Windows 2000 Professional [desktop apps only]
  • Minimum supported server: Windows 2000 Server [desktop apps only]
  • Header: secext.h (include Security.h)
like image 26
Milovan Tomašević Avatar answered Dec 30 '22 13:12

Milovan Tomašević