Прежде чем перейти к актуальному вопросу, я скажу, что, хотя я сейчас работаю на Python, я приму решение на ЛЮБОЙ язык. Я в основном программист на Java, но поскольку Java довольно ограничен его JVM, я не думал, что это можно будет создать на Java.Unicode SendKeys Alternative (Любой язык программирования)
Цель:
Я пытаюсь сделать программу, которая будет перехватывать событие клавиатуры (я уже сделал эту часть с помощью pyHook, это одна из главных причин, я программирование это в Python) , На основе этих событий и контекста мне нужно написать символы юникода (древнегреческие) в любое сфокусированное окно (в настоящее время только на ОС Windows, но единообразное решение, которое будет работать на всех ОС, кажется идеальным). В основном это программа, которая позволяет мне (ученику классического языка) вводить древнегреческий язык.
Проблемы:
Все не работает прекрасно до того момента, когда мне нужно отправить Юникода, как альфа, дельта или омега, с помощью SendKeys. Крючок отлично работает, и SendKeys отлично работает с обычными символами ASCII. Я попытался следующие библиотеки все безрезультатно: (например, код в нижней части)
- SendKeysCtypes (вопреки тому, что блог говорит, что не поддерживает Unicode)
- win32com.client используя оболочку и SendKeys ,
- SendKeys (Другая библиотека делает в основном то же самое)
Теперь, когда я изложил свою текущую ситуацию, у меня есть следующие вопросы:
Вопросы
1. Возможно ли использовать символы Unicode с SendKeys? (поисковые запросы Google пока показывают, что это невозможно).
Поскольку это, скорее всего, не тот случай:
2. Есть ли другая библиотека, способная отправлять символы юникода в сфокусированное окно?
Еще одна вещь, которая перешла мне на ум, заключается в том, что я могу вообще использовать неправильный метод (вся симуляция события событий нажатия клавиш). Любое другое решение, которое поможет мне достичь или, по крайней мере, приблизиться к моей цели, ОЧЕНЬ приветствуется.
#coding: utf-8
import time
import win32com
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run('notepad')
time.sleep(0.1)
shell.AppActivate('kladblok')
shell.SendKeys("When Unicode characters are pasted here, errors ensue", 0)
Какую кодировку вы используете? Обычно Windows использует UTF-16le. Это то, что вы использовали? (Скорее всего, у вас вообще нет кодировки или, возможно, UTF-8.) – tripleee
Python 2 или Python 3? Если первый, вы отправляете сырые 8-битные строки, которые, вероятно, интерпретируются как ANSI, а не в любой форме Unicode. – Kevin
@Kevin Исходный файл имеет «кодирование: utf-8», так что это будет моя первая догадка. Необработанный 8-бит UTF-16le должен быть хорошим; как еще вы его передали? – tripleee