2008-10-03 20 views
7

मैं गूगल के माध्यम से इस पाया: 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 ************************** 

इस यह करने के लिए सबसे अच्छा तरीका है?

+1

यह सवाल लगभग सटीक http://stackoverflow.com/questions/9052 की नकल है: पर लिंक detailcheck अधिक के लिए

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 

:

WMI स्क्रिप्ट ऐसी दिखाई देगी होगा/is-there-a-way-for-ms-access-to-grab-the-current-active-directory-user – Yarik

+0

संभावित डुप्लिकेट [क्या वर्तमान सक्रिय निर्देशिका उपयोगकर्ता को पकड़ने के लिए एमएस एक्सेस का कोई तरीका है?] (http://stackoverflow.com/questions/9052/is-there-a-way-for-ms-access-to-grab-the-current-active-directory-user) –

+0

मैंने उल्लिखित चरणों को पुन: पेश करने की कोशिश की [यहां] (http://stackoverflow.com/questions/168659/how-can-i-get-the-currently-logged-in-windows-user-in-access-vba#168666) (केन द्वारा जवाब) लेकिन मैं पर्यावरण वस्तु के किसी भी मूल्य को बदलने में सक्षम नहीं था। सीधे वीबीए में ऐसा करने का एकमात्र तरीका तब प्रस्तावित किया गया है [यहां] (http://stackoverflow.com/questions/168659/how-can-i-get-the-currently-logged-in-windows-user- इन-एक्सेस-वीबीए # 168986) (नॉक्स द्वारा जवाब) और मुझे समझ में नहीं आ रहा है कि यह जवाब क्यों डाउनग्रेड किया गया था! –

उत्तर

6

आप पर्यावरण $ का भी उपयोग कर सकते हैं लेकिन प्रश्न द्वारा निर्दिष्ट विधि बेहतर है। उपयोगकर्ता/अनुप्रयोग पर्यावरण चर बदल सकते हैं।

1

Alternative way ऐसा करने के लिए - शायद आपके द्वारा उल्लेख किया गया एपीआई उपयोगकर्ता नाम प्राप्त करने का एक बेहतर तरीका है।

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

तुम भी ऐसा कर सकता है:

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

यह भी एक UserDomain संपत्ति और अन्य चीजों का एक समूह है:

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

+1

यदि आप CreateObject() का उपयोग करते हैं तो आपको यह नहीं करना है। उपरोक्त कोड संदर्भ के बिना काम करेगा। – bobwienholt

+0

आपको WSNetwork चर को जेनेरिक ऑब्जेक्ट के रूप में परिभाषित किया जाना चाहिए, बजाय एफएसओ के मूल डेटा प्रकार (जो कुछ भी है - मैं देर से बाध्यकारी को छोड़कर एफएसओ का उपयोग नहीं करता हूं, इसलिए इसके किसी भी डेटा प्रकार को नहीं जानते सब)। –

1

मैं आम तौर पर VBA के भीतर से एक वातावरण का उपयोग जैसा कि निम्नलिखित में है। मुझे ऐसी समस्याएं नहीं हैं जिनके बारे में केन उल्लेख करता है।

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

अन्य पदों में वैकल्पिक तरीकों के बहुत सारे तरीके, लेकिन प्रश्न का उत्तर देने के लिए: हाँ यह करने का सबसे अच्छा तरीका है। COM ऑब्जेक्ट या WMI बनाने से तेज़, यदि आप चाहते हैं कि उपयोगकर्ता नाम है, और Win95 अप से विंडोज के सभी संस्करणों में उपलब्ध है।

0

डब्लूएमआई में वर्तमान लॉग इन उपयोगकर्ता नाम प्राप्त करने के बहुत सारे तरीके हैं। मेरा तरीका उपयोगकर्ता नाम के माध्यम से 'explorer.exe' की प्रक्रिया से प्राप्त करना है क्योंकि जब उपयोगकर्ता विंडो में लॉगिन करता है, तो वर्तमान उपयोगकर्ता के अनुसार इस फ़ाइल का उपयोग।
http://msdn.microsoft.com/en-us/library/aa394599%28v=vs.85%29.aspx

संबंधित मुद्दे

 संबंधित मुद्दे