python調用win32com.client的GetObject查找進程信息及服務信息


為何不用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM