Форум сайта python.su
Добрый день, вот такой функцией можно узнать заголовок приложения:
print win32gui.GetWindowText(win32gui.GetForegroundWindow())
При открытом Фотошопе выдает название редактируемого в нем изображения без упоминания, что это Фотошоп
Как можно узнать не заголовок, а именно название приложения?
Заранее благодарю
Офлайн
Что вы имеете в виду под “названием приложения”?
Имя бинарного файла?
Офлайн
s0rg, что бы при запрашивании названия активного приложения (Фотошопа, в данном случае) выдавалось Photoshop (или Adobe Photoshop), а не *название документа*.psd
Офлайн
Вот код который получает полный путь к 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)
Офлайн
s0rg, спасибо, работает, но слишком много операций. Начинает подтормаживать, являясь частью другой ресурсоемкой функции, поэтому не подходит
Может, есть специальная функция, вроде GetWindowText, но которая не текст title bar'а выдает, а название самого приложения?
Офлайн
Такого нет, можно получить класс окна и если он уникальный - составить словарь класс-приложение.
Офлайн
s0rg, еще раз спасибо. Нашел подобный способ без ограничений
http://guidesbook.blogspot.ru/2011/04/blog-post.html
Офлайн