Frage

Das fand ich über google: http://www.mvps.org/access /api/api0008.htm

'******************** Code Start **************************
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If ( lngX > 0 ) Then
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = vbNullString
    End If
End Function
'******************** Code End **************************

Ist dies der beste Weg, es zu tun?

War es hilfreich?

Lösung

Sie können auch Environ $ verwenden, aber die Methode, mit der Frage angegeben ist besser. Benutzer / Anwendungen können die Umgebungsvariablen ändern.

Andere Tipps

Sie können auch dies tun:

Set WshNetwork = CreateObject("WScript.Network")
Print WshNetwork.UserName

Es hat auch eine Benutzerdomäne Eigenschaft und ein paar andere Dinge:

http://msdn.microsoft.com/en -US / library / 907chf30 (VS.85) aspx

Ich verwende im Allgemeinen eine environ aus VBA wie im Folgenden. Ich habe nicht die Probleme hat, die Ken als Möglichkeiten erwähnt.

Function UserNameWindows() As String
    UserNameWindows = VBA.Environ("USERNAME") & "@" & VBA.Environ("USERDOMAIN")
End Function

Viele alternativer Methoden in anderen Beiträgen, aber die Frage zu beantworten: Ja, das ist der beste Weg, es zu tun. Schneller als ein COM-Objekt oder WMI zu schaffen, wenn alles, was Sie wollen, dass der Benutzername ist und in allen Versionen von Windows ab Win95 auf.

Alternative Art und Weise , das zu tun - wahrscheinlich die API Sie erwähnen, ist ein besserer Weg, Benutzernamen zu erhalten.

For Each strComputer In arrComputers
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
        For Each objItem in colItems
        Wscript.Echo "UserName: " & objItem.UserName & " is logged in at computer " & strComputer
Next

gibt es viele Möglichkeit, die aktuellen protokollierten Benutzernamen in WMI zu erhalten. meine Art und Weise ist es durch die Benutzername vom Prozess der ‚explorer.exe‘ zu bekommen denn wenn die Benutzeranmeldung in Fenster, die Zugriff auf diese Datei entsprechend den aktuellen Benutzer.

WMI-Skript sein würde wie folgt aussehen:

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strIP & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objprocess In colProcessList
   colProperties = objprocess.GetOwner(strNameOfUser, strUserDomain)
   If objprocess.Name = "explorer.exe" Then
      UsrName = strNameOfUser
      DmnName = strUserDomain
   End If
Next

für mehr detailcheck Link auf:
http://msdn.microsoft. com / en-us / library / aa394599% 28v = VS.85% 29.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top