我想在Python中使用win32 api获取进程名称(例如:notepad.exe), 所以代码如,
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 :(得分:0)
您可以使用wmi
python模块或公开WMIC
命令行实用程序来获取活动进程列表。
import wmi
c = wmi.WMI ()
for process in c.Win32_Process ():
print process.ProcessId, process.Name
答案 1 :(得分:0)
你可以使用psutil,它更简单和pythonic:psutil.Process().name()
,它可以在Windows和POSIX上使用。
答案 2 :(得分: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))
无需安装WMI
或psutil
。