python
2017-02-03 30 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

相关问题