2017-02-03 3 views
0

Я хочу, чтобы получить имя процесса (например: notepad.exe) с использованием Win32 API в Python, поэтому код, как,Как получить имя процесса от 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

Вы можете использовать модуль python wmi или открыть служебную программу командной строки WMIC, чтобы получить список активных процессов.

import wmi 
c = wmi.WMI() 

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

Вы можете использовать psutil, это более простой и вещий: 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)) 

Нет необходимости устанавливать WMI или psutil.

Смежные вопросы