Столкнулся с задачей получения имени процесса по идентификатору активного окна в среде Windows.
Задача довольно не тривиальная и пришлось немного помучиться, в итоге нашел прекрасный модуль psutil, позволяющий получить информацию обо всех запущенных процессах и использования ресурсов системы ( процессор, память ), модуль написан на Си и работает на Linux, Windows, OSX, FreeBSD как на 32-bit так и на 64-bit с вериями Python от 2.4 до 3.2, что является большим плюсом.
В итоге, использовав данный модуль весь код свелся к нескольким строкам.
import win32gui
import win32process
import psutil
def get_process_name():
# получаем id активного окна
hdlr = win32gui.GetForegroundWindow()
# получаем id процесса с помощью id окна
pid = win32process.GetWindowThreadProcessId(hdlr)
# получаем список всех активных процессов с помощью модуля psutil
processes = psutil.get_pid_list()
# ищем наш процесс
for p in processes:
if p == pid[1]:
# нашли его, получаем этот процесс и возвращаем его имя
process = psutil.Process(p)
return process.name
Вот в общем и все, получилось довольно кратко и главное эффективно.
Чтобы получить тот же результат в Linux, OSX, FreeBSD необходимо получить id процесса, для этого можно использовать этот инструмент xdotool.
Комментариев нет:
Отправить комментарий