2008-10-03 6 views
7

Je trouve cela via google: http://www.mvps.org/access/api/api0008.htmComment puis-je obtenir l'utilisateur Windows actuellement connecté dans Access VBA?

'******************** 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 ************************** 

Est-ce la meilleure façon de le faire?

+1

Cette question est presque double exact de http://stackoverflow.com/questions/9052/est-il-un-chemin-pour-ms-accès-à-saisir-le-courant-répertoire-utilisateur-actif – Yarik

+0

Possible duplicate of [Existe-t-il un moyen pour MS Access de récupérer l'utilisateur Active Directory actuel?] (http://stackoverflow.com/questions/9052/is-there-a-way-for-ms-access-to-grab-the-current-active-directory-user) –

+0

J'ai essayé de reproduire les étapes mentionnées [ici] (http://stackoverflow.com/questions/168659/how-can-i-get-the-currently-logged-in-windows-user-in-access-vba#168666) (réponse par ken) mais je n'ai pas pu changer la valeur de l'objet Environ. La seule façon de le faire en VBA est alors celle proposée [ici] (http://stackoverflow.com/questions/168659/how-can-i-get-the-currently-logged-in-windows-user- in-access-vba # 168986) (réponse par knox) et je n'arrive pas à comprendre pourquoi cette réponse a été déclassée! –

Répondre

6

Vous pouvez également utiliser Environ $ mais la méthode spécifiée par la question est meilleure. Les utilisateurs/applications peuvent changer les variables d'environnement.

1

Alternative way pour ce faire - probablement l'API que vous mentionnez est un meilleur moyen d'obtenir le nom d'utilisateur.

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 
10

Vous pouvez aussi le faire:

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

Il a également une propriété UserDomain et un tas d'autres choses:

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

+1

Vous ne devez pas si vous utilisez CreateObject(). Le code ci-dessus fonctionnera sans référence. – bobwienholt

+0

Vous devez avoir la variable WshNetwork définie comme un objet générique, plutôt que comme le type de données natif de FSO (quel qu'il soit - je n'utilise jamais le FSO sauf avec une liaison tardive, donc je ne connais aucun de ses types de données à tout). –

1

J'utilise généralement un environ à partir de VBA comme dans ce qui suit. Je n'ai pas eu les problèmes que Ken mentionne comme des possibilités.

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

Beaucoup de méthodes alternatives dans d'autres articles, mais pour répondre à la question: oui c'est la meilleure façon de le faire. Plus rapide que la création d'un objet COM ou WMI si tout ce que vous voulez est le nom d'utilisateur, et disponible dans toutes les versions de Windows à partir de Win95.

0

Il existe de nombreux moyens d'obtenir le nom d'utilisateur actuellement connecté dans WMI. ma façon est de l'obtenir à travers le nom d'utilisateur du processus de 'explorer.exe' parce que lorsque l'utilisateur se connecter dans la fenêtre, l'accès de ce fichier en fonction de l'utilisateur actuel.

script WMI serait ressembler à ceci:

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 

pour plus detailcheck le lien sur:
http://msdn.microsoft.com/en-us/library/aa394599%28v=vs.85%29.aspx

Questions connexes