首页 > 解决方案 > GetUserNameA 不检索最新的用户名

问题描述

我有一个使用 windows api 获取当前 windows 用户登录的功能(https://support.microsoft.com/en-nz/help/152970/visual-basic-procedure-to-get-current-user-name)。

Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

' Main routine to Dimension variables, retrieve user name.
Public Function WindowsUserName() As String

     ' Dimension variables
     Dim lpBuff As String * 25
     Dim ret As Long, UserName As String

     ' Get the user name minus any trailing spaces found in the name.
     ret = GetUserName(lpBuff, 25)
     WindowsUserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

End Function

问题:如果我重命名了 windows 用户(在 Windows 10 中),即使我使用新名称登录,此功能也总是使用旧名称。

无论如何要在VBA中检索最新的用户名?

更新:在少数评论中,控制面板中更改的帐户名称是显示名称,而不是用户名。现在回到我的问题:有没有办法在 VBA 中检索最新的 DISPLAY 名称?

标签: vbawinapiwindows-10

解决方案


OS Build 18362.356 和 18362.418 在用户帐户管理方面存在一些差异。(这两者之间还有一些其他版本。我没有测试这些版本。)

在 OS Build 18362.356 上,您可以看到以下 UI 和设置。您可以通过 更改用户名Control Panel\User Accounts\User Accounts -> Manage User Accounts -> Properties。您以管理员身份更改其他帐户用户名或更改您登录的帐户用户名。GetUserName重新启动后,您可以使用API 或 command获取新用户名set username

在此处输入图像描述

在 OS Build 18362.418 上,您可以看到以下 UI 和设置。根据您的描述,您似乎正在使用此构建版本并导致此问题。我也可以在这个构建版本上重现这个问题。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在 OS Build 18362.449上具有与 18362.356 相同的 UI 和设置,如我上面所示,我无法在此构建版本上重现此问题。


推荐阅读