2008-12-03 180 views

回答

16

一種方法是問環境:

Dim UserName As String 
Dim UserDomain As String 
UserName = Environ("USERNAME") 
UserDomain = Environ("USERDOMAIN") 

+0

如果您需要根據當前用戶進行檢查,這是非常不安全的。修改環境變量就足夠了(在命令提示符中使用`SET USERNAME = pwned`並從該提示符運行應用程序)。 – Fulvio 2016-03-10 19:04:11

+0

「不安全」一詞意味着它存在安全風險。事實並非如此。當然,流程的整個環境都可以寫入,但通常情況就是這樣 - 儘管如此,各種應用程序都是從環境中讀取它們的內容。如果任何人根據他們從環境中讀取的值確定需要適當授權的任務,那完全是他們的錯。 – Tomalak 2016-03-10 19:30:07

0

這個什麼(在Windows NT工程和僅佔明顯。)?

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 
8

和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 
4

使用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都返回相同的東西 - 計算機名稱。