استخدام WMI للحصول على اسم المستخدم ويندوز الحالي في VBA

StackOverflow https://stackoverflow.com/questions/287369

سؤال

وكنت أتساءل إذا كان هناك طريقة بسيطة لاستخدام 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، دون استخدام التسمية التوضيحية؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top