среда, 6 апреля 2011 г.

Получение имени процесса по идентификатору активного окна

Столкнулся с задачей получения имени процесса по идентификатору активного окна в среде 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.

Комментариев нет:

Отправить комментарий