Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 3, 2016 21:16:59

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

Just for fun делаю программу, которая могла бы набрать какой-нибудь текст в стороннем приложении, например, в браузере или текстовом редакторе. Хотелось бы кроссплатформенности, но, насколько понял, это реализуется по-разному в зависимости от ОС. Начал с винды. Есть, например, такой код:

 import win32com.client
test = '\u0210'
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate('Блокнот')
shell.SendKeys(test)
#shell.SendKeys(test.encode("utf-16le"), 0)
Удается послать ASCII-символ, например, ‘g’ ('\u0123'), но, когда дело доходит, например, до кириллицы или французских спец. символов, либо не вводится ничего, либо вводится ‘?’. Пробовал и другие программы, например, AkelPad. То же самое. Как это побороть?

Отредактировано vanvanov (Ноя. 3, 2016 21:17:50)

Офлайн

#2 Ноя. 3, 2016 23:17:55

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

Кури кодировки. Один раз поймешь - проблем не будет.

кстати http://python.su/forum/topic/31239/

Офлайн

#3 Ноя. 4, 2016 15:35:32

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

Iskatel
Кури кодировки. Один раз поймешь - проблем не будет.
С чего вы взяли, что я их не понимаю? В том-то и дело, что я уже пробовал разные кодировки в указанном коде, не работает.

Офлайн

#4 Ноя. 4, 2016 16:12:11

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

если Вы все знаете про кодировки, то зачем Вы пишете

vanvanov
test.encode(“utf-16le”)



Офлайн

#5 Ноя. 4, 2016 16:17:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

vanvanov
Как это побороть?
Iskatel
Кури кодировки.
vanvanov
С чего вы взяли, что я их не понимаю?
Правильно вам говорят. Не понимаете. С чего вы взяли что виндовые приложения из буфера ожидают получить данные в utf-8 а не в unicode или cp1251?



Офлайн

#6 Ноя. 4, 2016 16:18:12

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

izekia
если Вы все знаете про кодировки, то зачем Вы пишете
Это просто копипейст остался со stackoverflow, где в аналогичном случае был Python 2. Я этот фрагмент оставил, чтобы не забыть сконвертировать, например, в windows-1251 (при необходимости)

Офлайн

#7 Ноя. 4, 2016 16:18:54

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

doza_and
Правильно вам говорят. Не понимаете. С чего вы взяли что виндовые приложения из буфера ожидают получить данные в utf-8 а не в unicode или cp1251?
См. выше.

Офлайн

#8 Ноя. 4, 2016 17:11:22

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

в общем на самом деле все гораздо проще, метод называется SendKeys, и ни о каком буфере речи, конечно, не идет
Переключите раскладку в блокноте и выполните что-то вроде:

 shell.AppActivate('Блокнот')
time.sleep(0.5)
shell.SendKeys('Z k.,k. gbnjy')



Отредактировано izekia (Ноя. 4, 2016 17:11:43)

Офлайн

#9 Ноя. 4, 2016 17:53:31

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

izekia
Интересный вариант, но мне нужно вставлять спец. символы (например, à). В общем, решил проблему для винды:

 from pywinauto.application import Application
app = Application().start("notepad.exe")
app.UntitledNotepad.TypeKeys("Россия, вперёд! Æbout")
Можно и без pywinauto, есть форк для sendkeys.

Сейчас буду смотреть, что есть для Linux.

Офлайн

#10 Ноя. 4, 2016 18:41:22

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Набор текста в сторонних приложениях

да, интересный вариант, не знал, правда до такой интеграции пока не дорос))



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version