Форум сайта python.su
Пишу программку, в ней есть горячие клавиши, которые в свою очередь выполняют определенные действия. Нужно чтобы эти действия/горячие клавиши срабатывали только тогда, когда активен фокус ввода в области ввода текста. Например, если активно окно с блокнотом и в нем блымает курсор ввода текста, то опция гор. клавиши сработает. А вот если активен рабочий стол или системная папка, то при нажатии ничего происходить не должно… Как это можно реализовать?
В pyqt5, wx, tkinter это можно реализовать для своего, самостоятельно созданного окна.
А вот как это реализовать можно на глобальном уровне??? …для любого окна с возможностью ввода текста… Может кто-нибудь знает??
Можно конечно отследить этот момент по активному окну (как в примере ниже… определение наличия активного рабочего стола), но это же с названиями окна нужно мучатся, перечислять… брр… (((( да и потом, системные папки и самостоятельно созданные папки могут иметь разные наименования…тут уж не угонишься(((
Пример:
from win32gui import GetWindowText, GetForegroundWindow
if GetWindowText(GetForegroundWindow()) == “Program Manager”:
break
Если есть у кого мысли, то направьте меня, пожалуйста, в ту область, где копать нужно..))) Буду благодарен))
Офлайн
Забейте, короткий ответ “Нет, никак нельзя”.
Офлайн
PafnytiuДа все правильно вы копаете, копайте в сторону winAPI, по другому никак.
Если есть у кого мысли, то направьте меня, пожалуйста, в ту область, где копать нужно..))) Буду благодарен))
[code python][/code]
Офлайн
PEHDOM
копайте в сторону winAPI, по другому никак.
PafnytiuПостольку поскольку разумно предположить, что не каждая программа обязана использовать winAPI для отрисовки элементов интерфейса, задача не решается копанием в сторону winAPI.
для любого окна с возможностью ввода текста
Офлайн
FishHook
Забейте, короткий ответ “Нет, никак нельзя”.
Офлайн
PafnytiuВ вашей постановке задачи есть фундаментальное ограничение:
блинский((( Пардон… а можно узнать почему? можно не короткий ответ получить? ))) Питон это мой первый язык, я вообще в таких вопросах еще зеленый..((( В Сишках тоже есть ограничения такого рода? и с чем они вообще связны??? ..типо с безопасностью?
Pafnytiu. Если я могу рисовать в окне попиксельно, значит я могу реализовать элемент интерфейса для ввода текста, о котором windows знать не будет ничего - это же просто пиксели, программа никак не обращается к windows для реализации этого контрола. Т.е. ваша задача не решаема.
для любого окна с возможностью ввода текста
Офлайн
FishHook
Офлайн
FishHookв теории конечно да, но на практике любой контрол это экземпляр какого нить класса, к которому можно докопаться. Ну по крайней мере я не знаю ни одной проги где ввод текста реализован “попиксельно”, кроме разве что программ работающих в консоли, а ля фар например. Но ИМХО топикстартер имелл виду совсем не это.
Постольку поскольку разумно предположить, что не каждая программа обязана использовать winAPI для отрисовки элементов интерфейса, задача не решается копанием в сторону winAPI.
[code python][/code]
Отредактировано PEHDOM (Фев. 18, 2019 18:19:42)
Офлайн
PEHDOM
в теории конечно да, но на практике любой контрол это экземпляр какого нить класса, к которому можно докопаться. Ну по крайней мере я не знаю ни одной проги где ввод текста реализован “попиксельно”, кроме разве что программ работающих в консоли, а ля фар например. Но ИМХО топикстартер имелл виду совсем не это.
PEHDOMЧестно, не понимаю. Класс, это же сугубая абстракция, как вы предполагаете до него докапываться, если он не использует специфичных сисколов и вообще никак себя не регистрирует в ОС? Попиксельно, это, конечно, утрирование для усиления эффекта. Я могу сейчас на спор за час сделать рабочее решение - поле ввода текста в браузере, не использующее ни input, ни textarea. Сможете на него хуки навешать?
в теории конечно да, но на практике любой контрол это экземпляр какого нить класса, к которому можно докопаться.
Отредактировано FishHook (Фев. 18, 2019 18:36:01)
Офлайн
FishHookА при чем ту это? тулкит может не использовать библиотеку компонент windows, но если он хочет работать в определенной среде(windows в данном случае) то должно соответвовать определенным требованиям, например иметь определенные интерфейсы, или определенным образом реагировать на определенные сигналы.
Я не могу утверждать наверняка, но мне почему-то кажется, что великое множество существующих кроссплатформенных графических тулкитов не используют библиотеки компонентов windows. Времена MFC слава Аллаху давно прошли.
FishHookЧтоб не растекаться мыслью по древу, небольшая програмка написана на пайтоне с использованием pyQT(никаких библиотек компонентов windows). UISpy разложил ее как бог черепаху, на составляющие.
Честно, не понимаю. Класс, это же сугубая абстракция, как вы предполагаете до него докапываться, если он не использует специфичных сисколов и вообще никак себя не регистрирует в ОС?
FishHookНаверняка, можете, я не буду утверждать на 100% но думаю, что смогу таки повесить хук тем или иным способом, все зависит от потраченного на это времени. Но давайте будем откровенны,сколько людей занимаются подобным? Программист сейчас очень ленив, обычно использует уже готовые фреймворки, если кто и будет заниматься подобной “камасутрой” то один на миллион, да и то, скорее всего, ради спортивного интереса.
Попиксельно, это, конечно, утрирование для усиления эффекта. Я могу сейчас на спор за час сделать рабочее решение - поле ввода текста в браузере, не использующее ни input, ни textarea. Сможете на него хуки навешать?
[code python][/code]
Отредактировано PEHDOM (Фев. 19, 2019 11:58:13)
Офлайн