Найти - Пользователи
Полная версия: Имя активного приложения
Начало » Python для экспертов » Имя активного приложения
1
napuznik
Добрый день, вот такой функцией можно узнать заголовок приложения:
print win32gui.GetWindowText(win32gui.GetForegroundWindow())
При открытом Фотошопе выдает название редактируемого в нем изображения без упоминания, что это Фотошоп
Как можно узнать не заголовок, а именно название приложения?
Заранее благодарю
s0rg
Что вы имеете в виду под “названием приложения”?
Имя бинарного файла?
napuznik
s0rg, что бы при запрашивании названия активного приложения (Фотошопа, в данном случае) выдавалось Photoshop (или Adobe Photoshop), а не *название документа*.psd
s0rg
Вот код который получает полный путь к exe для активного окна:
from win32api import OpenProcess, CloseHandle
from win32gui import GetForegroundWindow
from win32process import GetWindowThreadProcessId, EnumProcessModules, GetModuleFileNameEx
import win32con
class SafeProcess(object):
    def __init__(self, pid, flags=win32con.PROCESS_ALL_ACCESS):
        self.__pid = pid
        self.__flags = flags
        self.__handle = None
        
    def __enter__(self):
        self.__handle = OpenProcess(self.__flags, False, self.__pid)
        return self.__handle
        
    def __exit__(self, type, value, traceback):
        if not isinstance(value, Exception):
            CloseHandle(self.__handle)
active_pid = GetWindowThreadProcessId(GetForegroundWindow())[1]
with SafeProcess(active_pid) as process:
    modules = EnumProcessModules(process)
    for mod in modules:
        mod_name = GetModuleFileNameEx(process, mod)
        if mod_name.endswith('.exe'):
            print '{:08X} {}'.format(mod, mod_name)

Обратите внимание, что доступ с PROCESS_ALL_ACCESS может быть не доступен для некоторых процессов
(минимально - нужны PROCESS_VM_READ + PROCESS_QUERY_INFORMATION) или повышать привилегии.
napuznik
s0rg, спасибо, работает, но слишком много операций. Начинает подтормаживать, являясь частью другой ресурсоемкой функции, поэтому не подходит
Может, есть специальная функция, вроде GetWindowText, но которая не текст title bar'а выдает, а название самого приложения?
s0rg
Такого нет, можно получить класс окна и если он уникальный - составить словарь класс-приложение.
napuznik
s0rg, еще раз спасибо. Нашел подобный способ без ограничений
http://guidesbook.blogspot.ru/2011/04/blog-post.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB