Форум сайта python.su
4
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)
Отредактировано vanvanov (Ноя. 3, 2016 21:17:50)
Офлайн
3
Кури кодировки. Один раз поймешь - проблем не будет.
кстати http://python.su/forum/topic/31239/
Офлайн
4
IskatelС чего вы взяли, что я их не понимаю? В том-то и дело, что я уже пробовал разные кодировки в указанном коде, не работает.
Кури кодировки. Один раз поймешь - проблем не будет.
Офлайн
12
если Вы все знаете про кодировки, то зачем Вы пишете
vanvanov
test.encode(“utf-16le”)
Офлайн
253
vanvanov
Как это побороть?
Iskatel
Кури кодировки.
vanvanovПравильно вам говорят. Не понимаете. С чего вы взяли что виндовые приложения из буфера ожидают получить данные в utf-8 а не в unicode или cp1251?
С чего вы взяли, что я их не понимаю?
Офлайн
4
izekiaЭто просто копипейст остался со stackoverflow, где в аналогичном случае был Python 2. Я этот фрагмент оставил, чтобы не забыть сконвертировать, например, в windows-1251 (при необходимости)
если Вы все знаете про кодировки, то зачем Вы пишете
Офлайн
4
doza_andСм. выше.
Правильно вам говорят. Не понимаете. С чего вы взяли что виндовые приложения из буфера ожидают получить данные в utf-8 а не в unicode или cp1251?
Офлайн
12
в общем на самом деле все гораздо проще, метод называется SendKeys, и ни о каком буфере речи, конечно, не идет
Переключите раскладку в блокноте и выполните что-то вроде:
shell.AppActivate('Блокнот') time.sleep(0.5) shell.SendKeys('Z k.,k. gbnjy')
Отредактировано izekia (Ноя. 4, 2016 17:11:43)
Офлайн
4
izekia
Интересный вариант, но мне нужно вставлять спец. символы (например, à). В общем, решил проблему для винды:
from pywinauto.application import Application app = Application().start("notepad.exe") app.UntitledNotepad.TypeKeys("Россия, вперёд! Æbout")
Офлайн
12
да, интересный вариант, не знал, правда до такой интеграции пока не дорос))
Офлайн