vba - 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 名称?
解决方案
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 和设置,如我上面所示,我无法在此构建版本上重现此问题。
推荐阅读
- sql - 如何在 SQL Server 2016 中创建标识重复变量的变量?
- hazelcast - Hazelcast 中 WAN 复制的性能
- python - 如何打印类中方法的返回值?
- grpc - gRPC grpc-状态:8
- android - 我在运行我的 Android 代码时遇到这些错误
- javascript - 如何重置firebase服务器以允许功能部署?
- html - 带有超链接的 HTML 中的 NSAttributedString
- python - Python + WebDriver — 使用 unittest 模块时启动的几个浏览器
- javascript - 如何在javascript中的数组中获得所需的排序输出
- html - 无效 HTML 有哪些具体的缺点?