【发布时间】:2010-09-25 03:11:57
【问题描述】:
我需要当前用户和域。我正在使用 VB 6 应用程序。
谢谢
【问题讨论】:
标签: vb6 windows-xp
我需要当前用户和域。我正在使用 VB 6 应用程序。
谢谢
【问题讨论】:
标签: vb6 windows-xp
使用 WshNetwork 对象的以下方法,在您的项目中引用 Windows 脚本宿主对象模型后可用:
Dim Network As WshNetwork
Set Network = New WshNetwork
Debug.Print "ComputerName: " & Network.ComputerName
Debug.Print "UserDomain: " & Network.UserDomain
Debug.Print "UserName: " & Network.UserName
为了保持一致性,我将结果转换为大写或小写,但这些是您需要的方法。
请注意,当在未登录域的机器上运行时,ComputerName 和 UserDomain 都返回相同的东西——计算机名称。
【讨论】:
以及 API 版本:
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Declare Function LookupAccountName Lib "advapi32.dll" Alias "LookupAccountNameA" (lpSystemName As String, ByVal lpAccountName As String, sid As Any, cbSid As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Long) As Long
Private Sub Form_Load()
Dim sDomainName As String * 255
Dim lDomainNameLength As Long
Dim sUserName as String
Dim bUserSid(255) As Byte
Dim lSIDType As Long
Rem Create a buffer
sUserName = String(100, Chr$(0))
Rem Get the username
GetUserName sUserName, 100
Rem strip the rest of the buffer
sUserName = Left$(sUserName, InStr(sUserName, Chr$(0)) - 1)
rem Show the temppath and the username
MsgBox "Hello " + strUserName
lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, _
lSIDType)
if lResult <>0 then
msgbox sDomainName
end if
end sub
【讨论】:
基本上,您需要进行 Windows API 调用。 搜索 vbnet.mvps.org 得到以下答案。
【讨论】:
这个怎么样?
Private Function IsAdmin() As Boolean
Dim groups As Object
Dim user As Object
Set groups = GetObject("WinNT://./administrators")
For Each user In groups.members
If UCase(Environ("USERNAME")) = UCase(user.Name) Then
IsAdmin = True
End If
Next user
End Function
【讨论】:
一种方法是询问环境:
Dim UserName As String
Dim UserDomain As String
UserName = Environ("USERNAME")
UserDomain = Environ("USERDOMAIN")
(显然,仅适用于 Windows NT 及更高版本。)
【讨论】:
SET USERNAME=pwned 并从该提示符运行应用程序)。