使用WMI在VBA中获取当前的Windows用户名
我想知道是否有一个简单的方法来使用WMI来获取当前的Windows用户名和域名。 Windows API调用只是简单的用户名,所以你最终会再次调用域名。 我有一些代码,但我得到一个自动化错误。 有任何想法吗? 我认为我走在正确的道路上,但是我对WMI有点新鲜。
函数GetFullName()作为string 昏暗的电脑作为string 电脑=“。” Dim objWMIService,colProcessList As Object 设置objWMIService = GetObject(“winmgmts:\\”&computer&“\ root \ cimv2”) 设置colProcessList = objWMIService.ExecQuery _ (“selectTOP 1 *从Win32_Process WHERE名称='EXCEL.EXE'”) Dim uname,udomain As String Dim objProcess As Object 对于每个objProcess在colProcessList中 objProcess.GetOwner uname,udomain 下一个 GetFullName = UCase(udomain)&“\”&UCase(uname) 结束function
更新:请参阅接受的答案
WQL中没有TOP 1子句。 离开它,你的查询应该工作:
"SELECT * FROM Win32_Process WHERE Name = 'EXCEL.EXE'"
怎么样
UserName = Environ("Username") Domain = Environ("UserDomain") Combined= Environ("UserDomain") & "\" & Environ("Username")
意识到这是旧的,但要处理多个Excel实例,另一篇文章(下面链接)阐明了如何获取当前应用程序的进程ID:
Declare Function GetCurrentProcessId Lib "kernel32" () As Long ... ProcessID = GetCurrentProcessId Set ColProcessIDList = objWMIService.ExecQuery( _ "SELECT * FROM Win32_Process WHERE ProcessID = '" & ProcessID & "'") ...
如何通过VBA获取当前Excel实例的进程ID,而不使用标题?