如何通过Python获取进程名称?

时间:2017-02-03 05:55:03

标签: python

我想在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')

我该如何解决这个问题?

感谢。

3 个答案:

答案 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))

无需安装WMIpsutil