استخدام WMI للحصول على اسم المستخدم ويندوز الحالي في VBA
سؤال
وكنت أتساءل إذا كان هناك طريقة بسيطة لاستخدام WMI لتحصل على اسم مستخدم Windows الحالي مع المجال. الدعوة API ويندوز فقط يحصل لك اسم المستخدم قصيرة، حتى ينتهي بك الأمر القيام مكالمة أخرى للحصول على اسم المجال. لدي بعض التعليمات البرمجية، ولكن أحصل على خطأ الأتمتة. أيه أفكار؟ أعتقد أنني على الطريق الصحيح، ولكن أنا جديدة قليلا إلى WMI.
Function GetFullName() As String Dim computer As String computer = "." Dim objWMIService, colProcessList As Object Set objWMIService = GetObject("winmgmts:\\" & computer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("SELECT TOP 1 * FROM Win32_Process WHERE Name = 'EXCEL.EXE'") Dim uname, udomain As String Dim objProcess As Object For Each objProcess In colProcessList objProcess.GetOwner uname, udomain Next GetFullName = UCase(udomain) & "\" & UCase(uname) End Function
وUPDATE: انظر التعليقات على إجابة مقبولة
المحلول
وليس هناك شرط TOP 1 في WQL. ترك ذلك ويجب أن تعمل الاستعلام الخاص بك:
"SELECT * FROM Win32_Process WHERE Name = 'EXCEL.EXE'"
نصائح أخرى
وماذا عن
UserName = Environ("Username")
Domain = Environ("UserDomain")
Combined= Environ("UserDomain") & "\" & Environ("Username")
وأدرك هذا هو القديم، ولكن للتعامل مع حالات متعددة تتفوق، وظيفة أخرى (مرتبط أدناه) توضح كيفية الحصول على معرف العملية من التطبيق الحالي مع:
Declare Function GetCurrentProcessId Lib "kernel32" () As Long
...
ProcessID = GetCurrentProcessId
Set ColProcessIDList = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Process WHERE ProcessID = '" & ProcessID & "'")
...
<وأ href = "https://stackoverflow.com/questions/942058/how-to-get-the-process-id-of-the-current-excel-throught-vba-without-relying-on" > كيفية الحصول على معرف عملية مثيل إكسل الحالي، من خلال VBA، دون استخدام التسمية التوضيحية؟