Найти - Пользователи
Полная версия: Набор текста в сторонних приложениях
Начало » Python для новичков » Набор текста в сторонних приложениях
1
vanvanov
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. То же самое. Как это побороть?
Iskatel
Кури кодировки. Один раз поймешь - проблем не будет.

кстати http://python.su/forum/topic/31239/
vanvanov
Iskatel
Кури кодировки. Один раз поймешь - проблем не будет.
С чего вы взяли, что я их не понимаю? В том-то и дело, что я уже пробовал разные кодировки в указанном коде, не работает.
izekia
если Вы все знаете про кодировки, то зачем Вы пишете
vanvanov
test.encode(“utf-16le”)
doza_and
vanvanov
Как это побороть?
Iskatel
Кури кодировки.
vanvanov
С чего вы взяли, что я их не понимаю?
Правильно вам говорят. Не понимаете. С чего вы взяли что виндовые приложения из буфера ожидают получить данные в utf-8 а не в unicode или cp1251?

vanvanov
izekia
если Вы все знаете про кодировки, то зачем Вы пишете
Это просто копипейст остался со stackoverflow, где в аналогичном случае был Python 2. Я этот фрагмент оставил, чтобы не забыть сконвертировать, например, в windows-1251 (при необходимости)
vanvanov
doza_and
Правильно вам говорят. Не понимаете. С чего вы взяли что виндовые приложения из буфера ожидают получить данные в utf-8 а не в unicode или cp1251?
См. выше.
izekia
в общем на самом деле все гораздо проще, метод называется SendKeys, и ни о каком буфере речи, конечно, не идет
Переключите раскладку в блокноте и выполните что-то вроде:
 shell.AppActivate('Блокнот')
time.sleep(0.5)
shell.SendKeys('Z k.,k. gbnjy')
vanvanov
izekia
Интересный вариант, но мне нужно вставлять спец. символы (например, à). В общем, решил проблему для винды:
 from pywinauto.application import Application
app = Application().start("notepad.exe")
app.UntitledNotepad.TypeKeys("Россия, вперёд! Æbout")
Можно и без pywinauto, есть форк для sendkeys.

Сейчас буду смотреть, что есть для Linux.
izekia
да, интересный вариант, не знал, правда до такой интеграции пока не дорос))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB