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