我想获取用户的全名,而不是登录名,即在Windows 7开始菜单右上方显示的全名。它可能只在活动目录设置中显示为全名。
os.environ['USERNAME']
win32api.GetUserName()
这两个都返回登录名,我该如何获取用户的全名?
简单搜索得到了这个链接
以及以下代码:
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
已在Windows XP上测试并可用
正如OP在此评论中指出的那样,pywin32
将该API调用封装成一个更简单的函数:
win32api.GetUserName(3)
GetUserName
指向ctypes.windll.secur32.GetUserNameExW
,且3
是来自ctypes
常量的相同3
pywin32
版本为219(截至目前为止的最新版本),而 win32api.GetUserName
不接受任何参数。我必须使用 win32api.GetUserNameEx(3)
,这个方法非常好用。不确定这是否会给其他人带来问题。 - self.如需更详细的信息:
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))
输出示例:
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 : TomasevicM@Microsoft.Com
NameCanonicalEx : Microsoft.Com/Engineering Tomasevic Milovan (TomasevicM)
NameServicePrincipal :
NameDnsDomain : Microsoft.Com\TomasevicM
NameUnknown
: 未知的名称类型。NameFullyQualifiedDN
: 完全限定的区别名称(例如,CN=Jeff Smith,OU=Users,DC=Engineering,DC=Microsoft,DC=Com)。NameSamCompatible
: 旧版帐户名称(例如,Engineering\JSmith)。仅域版本包括尾随反斜杠 ()。NameDisplay
: “友好”的显示名称(例如,Jeff Smith)。显示名称不一定是定义相对区别名称(RDN)。NameUniqueId
: IIDFromString 函数返回的 GUID 字符串(例如,{4fa050f0-f561-11cf-bdd9-00aa003a77b6})。NameCanonical
: 完整的规范名称(例如,engineering.microsoft.com/software/someone)。仅域版本包括尾随正斜杠 (/)。NameUserPrincipal
: 用户主体名称(例如,someone@example.com)。NameCanonicalEx
: 与 NameCanonical 相同,只是将最右侧的正斜杠 (/) 替换为换行符 (\n),即使在仅域情况下也是如此(例如,engineering.microsoft.com/software\nJSmith)。NameServicePrincipal
: 广义服务主体名称(例如,www/www.microsoft.com@microsoft.com)。NameDnsDomain
: DNS 域名后跟反斜杠和 SAM 用户名称。