簡體   English   中英

如何在Windows中登錄用戶的全名?

[英]How to get logged-in user's full name in windows?

如何使用Windows API或其他東西獲取登錄用戶的全名(他/她輸入的名稱)? 例如,如何獲得“John Smith”,而不是“john”(因為這是他的用戶名)。

GetUserName(...)不執行該作業,因為它返回用戶名,而不是全名。

你試過GetUserNameEx (NameDisplay,...)嗎?

一個快速的谷歌揭示NetUserGetInfo應該這樣做。 它看起來不像世界上最容易使用的API。

我認為你所追求的級別是10,它返回一個USER_INFO_10結構,其中包含一個usri10_full_name

使用NetApiBufferFree確保您記得在完成后釋放結構!

NetQueryDisplayInformation應該有所幫助。 字段usri1_full_name將給出全名

好吧,如果用戶從未輸入過,那么你無法獲得它。 您可以查找已安裝的電子郵件程序並禮貌地詢問他們的信息,但出於多種原因這是一個壞主意。

這是您的最佳鏡頭:獲取用戶在注冊Windows副本時輸入的名稱。 這是在注冊表中。 Windows版本的確切位置不同,但在最新版本中,它位於HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion (以及Windows 95/98 / ME, HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion )。

在那里,你會找到RegisteredOwner,這是應該輸入名稱的地方。 顯然,如果這是一台公司計算機而且機器是由IT設置的,那么在那里找到標准化的公司字符串是很常見的。 當然,很多人會在那里輸入名字,如“Joe Sixpack”或“Cracked by Quartex”。 然而,這是盡可能接近的。

我在Windows注冊表中找到了一些地方用我的電子郵件或我的全名:

  1. HKEY_CURRENT_USER \\ Software \\ Microsoft \\ Office \\ Common \\ UserInfo具有包含我的全名的UserName
  2. KEY_CURRENT_USER \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Explorer具有包含我的電子郵件的登錄用戶名
  3. HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Windows NT \\ CurrentVersion \\ Winlogon具有包含我的電子郵件的DefaultUserName

第一個顯然需要安裝Microsoft Office,並且用戶已在Office設置中輸入了他/她的名字。 第二個和第三個更可靠,但包含電子郵件,但電子郵件也比完整名稱更好(或更好)識別。

我相信我找到了一個比GetUserNameEx更好的相關答案,也就是說,我可以處理GetUserNameEx失敗的一些情況。

我的備選答案是這里包括德爾福的示例代碼。

簡而言之,如果GetUserInfoEx(3,...)失敗,請讀取GetUserInfoEx(2,...),它返回“machinename \\ username”形式的名稱,然后您可以將其傳遞到NETAPI32.dll中的NetUserInfo函數,將讀取本地SAM數據庫,如果用戶的全名已存儲在本地SAM數據庫中,則該數據庫將存儲該數據庫。 當然,許多家庭非域用戶從未設置過這個,所以這里的其他答案也可能提供一些提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM