python
2017-02-03 75 views 0 likes 
0

我想進程名(例如:的notepad.exe)通過使用Python中的Win32 API, 所以這樣的代碼,如何通過Python獲取進程名稱?

hwnd = FindWindow(None,"123.txt - notepad") 
threadid ,pid = win32process.GetWindowThreadProcessId(hwnd) 
print('pid=' + str(pid)) 
handle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, FALSE, pid) 
proc_name = win32process.GetModuleFileNameEx(handle, 0) 

但異常發生,

pywintypes.error: (299, 'GetModuleFileNameEx', 'ReadProcessMemory 
or WriteProcessMemory ....exception') 

我怎麼能解決這個問題?

謝謝。

回答

0

您可以使用wmi python模塊或公開WMIC命令行實用程序來獲取活動進程的列表。

import wmi 
c = wmi.WMI() 

for process in c.Win32_Process(): 
    print process.ProcessId, process.Name 
0

您可以使用psutil,它更簡單,Python的:psutil.Process().name(),它會在Windows和POSIX工作。

+0

謝謝,我知道我可以使用psutil,但是我可以直接使用win32 API嗎? –

0

這是pywinauto一點修改的代碼變得只使用PyWin32進程的可執行文件路徑和名稱:

hwnd = FindWindow(None,"123.txt - notepad") 
threadid, pid = win32process.GetWindowThreadProcessId(hwnd) 
print('pid=' + str(pid)) 

from win32com.client import GetObject 
_wmi = GetObject('winmgmts:') 

# collect all the running processes 
processes = _wmi.ExecQuery('Select * from win32_process') 
for p in processes: 
    if isinstance(p.ProcessId, int) and p.ProcessId == pid: 
     print((p.ProcessId, p.ExecutablePath, p.CommandLine, p.Name)) 

無需安裝WMIpsutil

相關問題