Windows 10升级到64位请求PtrSafe属性有问题吗



我在以下声明语句中遇到问题:

Private Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long

错误是请求PtrSafe属性。

请尝试此声明:

Private Declare PtrSafe Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" _
(ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long

并使用下一个功能来检索记录的用户名:

Function GetUserName() As String
Const lpnLength As Long = 255
Dim status As Long, lpName, lpUserName As String
'Assign the buffer size constant to lpUserName.
lpUserName = Space$(lpnLength + 1)
status = WNetGetUser(lpName, lpUserName, lpnLength)
'See whether error occurred.
If status = 0 Then
lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
End If
GetUserName = lpUserName
End Function

它可以被称为:

Sub TestUserName()
Debug.Print GetUserName
End Sub

以上所有内容,只有当您坚持使用API时。。。

但是VBA有一个简单的获取方法:

Debug.Print Application.UserName

如果你不喜欢,使用VBScript(在VBA中(可能会有所帮助:

Sub testUserNameVBSCript()
Dim userName As String
userName = CreateObject("WScript.Network").userName
Debug.Print userName
End Sub

最新更新