winapi - query - ¿Cómo puedo obtener el usuario de Windows actualmente conectado en Access VBA?
ms access close form (6)
Por lo general, utilizo un entorno desde dentro de VBA como se muestra a continuación. No he tenido los problemas que Ken menciona como posibilidades.
Function UserNameWindows() As String
UserNameWindows = VBA.Environ("USERNAME") & "@" & VBA.Environ("USERDOMAIN")
End Function
Encontré esto a través de 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 **************************
¿Es esta la mejor manera de hacerlo?
También puede usar Environ $ pero el método especificado por la pregunta es mejor. Los usuarios / aplicaciones pueden cambiar las variables de entorno.
También puedes hacer esto:
Set WshNetwork = CreateObject("WScript.Network")
Print WshNetwork.UserName
También tiene una propiedad UserDomain y un montón de otras cosas:
http://msdn.microsoft.com/en-us/library/907chf30(VS.85).aspx
Muchos métodos alternativos en otras publicaciones, pero para responder a la pregunta: sí, esa es la mejor manera de hacerlo. Más rápido que crear un objeto COM o WMI si todo lo que desea es el nombre de usuario y está disponible en todas las versiones de Windows desde Win95.
hay muchas formas de obtener el nombre de usuario registrado actual en WMI. mi camino es conseguirlo a través del nombre de usuario del proceso de ''explorer.exe'' porque cuando el usuario inicia sesión en la ventana, el acceso de este archivo depende del usuario actual.
El script de WMI se vería así:
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
para más detalles, compruebe el enlace en:
http://msdn.microsoft.com/en-us/library/aa394599%28v=vs.85%29.aspx
Una forma alternativa de hacerlo: probablemente la API que mencione sea una mejor forma de obtener un nombre de usuario.
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