为何不用wmi呢?因为执行很慢,为啥不用winreg?因为winreg在批量获取及遍历服务方面很不方便,于是采用这方法
该方法同命令行下的wmic执行
获取服务信息
#coding=utf8 from win32com.client import GetObject mywmi = GetObject("winmgmts:") objs = mywmi.InstancesOf("Win32_Service") for obj in objs: print obj.PathName
获取进程信息
#coding=utf8
from win32com.client import GetObject mywmi = GetObject("winmgmts:") objs = mywmi.InstancesOf("Win32_Process") for obj in objs: #print obj.executablepath print obj.CommandLine
执行代码的灵感来源于以下这段文字:
VB使用Wmi获取系统当前进程详细信息/列表,VB使用Wmi获取系统当前进程信息/列表,VB使用Wmi获取系统进程信息/列表,VB使用Wmi获取当前进程信息/列表,VB使用Wmi获取进程信息/列表,VB Wmi 获取当前进程信息/列表,VB Wmi 系统进程详细信息/列表,VB Wmi 进程列表,VB Wmi 进程信息,VB Wmi 进程,VB Wmi,GetObject("winmgmts://./root/cimv2:win32_process").instances,winmgmts://./root/cimv2:win32_process,VB winmgmts://./root/cimv2,VB win32_process,VB GetObject,进程名称:Wmi.Name,进程路径:Wmi.executablepath,线程数量:Wmi.ThreadCount,PID:Wmi.ProcessID,父PID:Wmi.ParentProcessID,优先级:Wmi.Priority,命令行:Wmi.CommandLine,占用内存:Wmi.WorkingSetSize / 1024 & "K",用户名称:Wmi.ExecMethod_("GetOwner").User,启动时间:Wmi.CreationDate,另外一种获取PID函数:Wmi.Handle。 VB使用Wmi获取系统当前进程详细信息: Dim Wmi, Jic As String For Each Wmi In GetObject("winmgmts://./root/cimv2:win32_process").instances_ '循环进程 Jic = Jic & " " & _ "进程:" & Wmi.Name & " " & _ "路径:" & Wmi.executablepath & " " & _ "线程:" & Wmi.ThreadCount & " " & _ "PID:" & Wmi.ProcessID & " " & _ "父PID:" & Wmi.ParentProcessID & " " & _ "优先级:" & Wmi.Priority & " " & _ "命令行:" & Wmi.CommandLine & " " & _ "内存:" & Wmi.WorkingSetSize / 1024 & "K" & " " & _ "用户:" & Wmi.ExecMethod_("GetOwner").User & " " & _ "启动时间:" & Wmi.CreationDate & " " & vbCrLf '"PID:" & Wmi.Handle '另外一种获取PID函数 Next MsgBox Jic VB "winmgmts://./root/CIMV2"对象的详细用法: ·GetOwner() 取得进程用户名。用法:objGetOwner(变量名) Terminate() 结束进程。用法:obj.Terminate() 属性: ProcessID 进程的PID。 ThreadCount 进程的线程数 ExecutablePath 进程的完整路径
服务状态 State
可用参数如下
[Dynamic, Provider("CIMWin32"), SupportsUpdate, UUID("{8502C4D9-5FBB-11D2-AAC1-006008C78BC7}"), DisplayName("Services"), AMENDMENT] class Win32_Service : Win32_BaseService { boolean AcceptPause; boolean AcceptStop; string Caption; uint32 CheckPoint; string CreationClassName; boolean DelayedAutoStart; string Description; boolean DesktopInteract; string DisplayName; string ErrorControl; uint32 ExitCode; datetime InstallDate; string Name; string PathName; uint32 ProcessId; uint32 ServiceSpecificExitCode; string ServiceType; boolean Started; string StartMode; string StartName; string State; string Status; string SystemCreationClassName; string SystemName; uint32 TagId; uint32 WaitHint; };
参见msdn:https://docs.microsoft.com/zh-cn/windows/desktop/CIMWin32Prov/win32-service