Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 18, 2019 16:45:31

Pafnytiu
Зарегистрирован: 2019-02-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

Пишу программку, в ней есть горячие клавиши, которые в свою очередь выполняют определенные действия. Нужно чтобы эти действия/горячие клавиши срабатывали только тогда, когда активен фокус ввода в области ввода текста. Например, если активно окно с блокнотом и в нем блымает курсор ввода текста, то опция гор. клавиши сработает. А вот если активен рабочий стол или системная папка, то при нажатии ничего происходить не должно… Как это можно реализовать?

В pyqt5, wx, tkinter это можно реализовать для своего, самостоятельно созданного окна.

А вот как это реализовать можно на глобальном уровне??? …для любого окна с возможностью ввода текста… Может кто-нибудь знает??

Можно конечно отследить этот момент по активному окну (как в примере ниже… определение наличия активного рабочего стола), но это же с названиями окна нужно мучатся, перечислять… брр… (((( да и потом, системные папки и самостоятельно созданные папки могут иметь разные наименования…тут уж не угонишься(((

Пример:

from win32gui import GetWindowText, GetForegroundWindow

if GetWindowText(GetForegroundWindow()) == “Program Manager”:
break

Если есть у кого мысли, то направьте меня, пожалуйста, в ту область, где копать нужно..))) Буду благодарен))

Офлайн

#2 Фев. 18, 2019 16:54:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

Забейте, короткий ответ “Нет, никак нельзя”.



Офлайн

#3 Фев. 18, 2019 17:14:06

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

Pafnytiu
Если есть у кого мысли, то направьте меня, пожалуйста, в ту область, где копать нужно..))) Буду благодарен))
Да все правильно вы копаете, копайте в сторону winAPI, по другому никак.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Фев. 18, 2019 17:21:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

PEHDOM
копайте в сторону winAPI, по другому никак.
Pafnytiu
для любого окна с возможностью ввода текста
Постольку поскольку разумно предположить, что не каждая программа обязана использовать winAPI для отрисовки элементов интерфейса, задача не решается копанием в сторону winAPI.



Офлайн

#5 Фев. 18, 2019 17:21:05

Pafnytiu
Зарегистрирован: 2019-02-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

FishHook
Забейте, короткий ответ “Нет, никак нельзя”.


блинский((( Пардон… а можно узнать почему? можно не короткий ответ получить? ))) Питон это мой первый язык, я вообще в таких вопросах еще зеленый..((( В Сишках тоже есть ограничения такого рода? и с чем они вообще связны??? ..типо с безопасностью?

Офлайн

#6 Фев. 18, 2019 17:25:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???


Pafnytiu
блинский((( Пардон… а можно узнать почему? можно не короткий ответ получить? ))) Питон это мой первый язык, я вообще в таких вопросах еще зеленый..((( В Сишках тоже есть ограничения такого рода? и с чем они вообще связны??? ..типо с безопасностью?
В вашей постановке задачи есть фундаментальное ограничение:
Pafnytiu
для любого окна с возможностью ввода текста
. Если я могу рисовать в окне попиксельно, значит я могу реализовать элемент интерфейса для ввода текста, о котором windows знать не будет ничего - это же просто пиксели, программа никак не обращается к windows для реализации этого контрола. Т.е. ваша задача не решаема.



Офлайн

#7 Фев. 18, 2019 17:37:52

Pafnytiu
Зарегистрирован: 2019-02-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

FishHook

понятненько)

блин, ребята, так оперативно помогли… Спасибо большое!!!

эх…. пойду напьюсь с горя(

https://coub.com/view/d8mlg

Офлайн

#8 Фев. 18, 2019 18:13:49

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

FishHook
Постольку поскольку разумно предположить, что не каждая программа обязана использовать winAPI для отрисовки элементов интерфейса, задача не решается копанием в сторону winAPI.
в теории конечно да, но на практике любой контрол это экземпляр какого нить класса, к которому можно докопаться. Ну по крайней мере я не знаю ни одной проги где ввод текста реализован “попиксельно”, кроме разве что программ работающих в консоли, а ля фар например. Но ИМХО топикстартер имелл виду совсем не это.

Pafnytiu можете посмотреть как это реализовано в swapy https://sourceforge.net/projects/swapy/



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 18, 2019 18:19:42)

Офлайн

#9 Фев. 18, 2019 18:34:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

PEHDOM
в теории конечно да, но на практике любой контрол это экземпляр какого нить класса, к которому можно докопаться. Ну по крайней мере я не знаю ни одной проги где ввод текста реализован “попиксельно”, кроме разве что программ работающих в консоли, а ля фар например. Но ИМХО топикстартер имелл виду совсем не это.

Я не могу утверждать наверняка, но мне почему-то кажется, что великое множество существующих кроссплатформенных графических тулкитов не используют библиотеки компонентов windows. Времена MFC слава Аллаху давно прошли.

PEHDOM
в теории конечно да, но на практике любой контрол это экземпляр какого нить класса, к которому можно докопаться.
Честно, не понимаю. Класс, это же сугубая абстракция, как вы предполагаете до него докапываться, если он не использует специфичных сисколов и вообще никак себя не регистрирует в ОС? Попиксельно, это, конечно, утрирование для усиления эффекта. Я могу сейчас на спор за час сделать рабочее решение - поле ввода текста в браузере, не использующее ни input, ни textarea. Сможете на него хуки навешать?



Отредактировано FishHook (Фев. 18, 2019 18:36:01)

Офлайн

#10 Фев. 19, 2019 11:45:06

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Можно ли в питоне отслеживать фокус ввода (глобально, во всех окнах)???

FishHook
Я не могу утверждать наверняка, но мне почему-то кажется, что великое множество существующих кроссплатформенных графических тулкитов не используют библиотеки компонентов windows. Времена MFC слава Аллаху давно прошли.
А при чем ту это? тулкит может не использовать библиотеку компонент windows, но если он хочет работать в определенной среде(windows в данном случае) то должно соответвовать определенным требованиям, например иметь определенные интерфейсы, или определенным образом реагировать на определенные сигналы.
FishHook
Честно, не понимаю. Класс, это же сугубая абстракция, как вы предполагаете до него докапываться, если он не использует специфичных сисколов и вообще никак себя не регистрирует в ОС?
Чтоб не растекаться мыслью по древу, небольшая програмка написана на пайтоне с использованием pyQT(никаких библиотек компонентов windows). UISpy разложил ее как бог черепаху, на составляющие.


Какимто образом он же это сделал. Таже фигня с приложением на wx и tk, честно говоря мне не удалось найти у себя программу котороую UISpy не мого бы разложить по фреймам-кнопочкам-менющкам. Да с Far manager, по вполне определенным причинам, он не справился, он разложил на составляющие само окно, но содержание окна не смог, но я об этом говорил в предыдущем посте.
Да он использует не совсем WinAPI а Microsoft UI Automation, но вобщем то разница невелика. UI Automation представляет из себя библиотеку виртуализации дерева контролов произвольного Win32, Windows Forms или WPF приложения, с возможностью последующего доступа к свойствам этих контролов на чтение и запись. Разрабатывался в первую очередь для автотестов ГУИ. Ноне все ли равно для чего его разрабатывали, главное что принципиально, такая возможность есть. Да конечно это задача не для одного “начинающего погромиста” и далеко не на пол-дня работы. Но всеже есть всякие PyWinAuto или AutoIt которые както тоже делают чтото подобное.

FishHook
Попиксельно, это, конечно, утрирование для усиления эффекта. Я могу сейчас на спор за час сделать рабочее решение - поле ввода текста в браузере, не использующее ни input, ни textarea. Сможете на него хуки навешать?
Наверняка, можете, я не буду утверждать на 100% но думаю, что смогу таки повесить хук тем или иным способом, все зависит от потраченного на это времени. Но давайте будем откровенны,сколько людей занимаются подобным? Программист сейчас очень ленив, обычно использует уже готовые фреймворки, если кто и будет заниматься подобной “камасутрой” то один на миллион, да и то, скорее всего, ради спортивного интереса.
Да ТС писал “для любого окна с возможностью ввода текста” вы восприняли это как “для вообще любого возможного окна”, я воспринял это как “для окна произвольной(а не конкретной) программы имеющей соответствующие контролы”. В вашем понимании это реализовать нельзя, по вполне понятным причинам и я даже с этим согласен, всегда можно нарваться на особо упоротого “погромиста” который будет изобретать свой велосипед. В моем - вполне возможно, и это будет работать в 99,9% случаев(оставим 0.1% как раз для описаных вами случаев). Но это справедливо вобщем с любой программой, нет идеальной программы которая будет работать со 100% гарантией в 100% случаев, всегда можно найти условия при которых программа даст сбой, так чтоже из за этого не писать программы?





==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 19, 2019 11:58:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version