Как смоделировать ввод текста Unicode в форму - PullRequest
1 голос
/ 01 марта 2011

Я написал приложение, в котором пользователь может зарегистрировать пользовательские глобальные горячие клавиши. И когда эти горячие клавиши нажимаются, они отправляют данный текст в активную форму. Я использую InputSimulator libray, чтобы сделать это. Но когда я попытался заставить это приложение писать текст, содержащий символы Юникода (например: «Ə» в азербайджанском алфавите), он пишет «?» вместо. Я заменил этот символ на "\ u0259" и другие шестнадцатеричные коды для этого символа (и другие, такие как "Ü", "Ö", "Ğ", "Ş", "Ç"). Но ничего не изменилось. Я не могу найти другие библиотеки, поддерживающие Юникод, чтобы выполнить этот процесс моделирования.

Я использую WindowsForms. Я надеюсь, что вы мне поможете. Спасибо!

Ответы [ 3 ]

1 голос
/ 01 марта 2011

Это может быть проблема с шрифтом, который вы используете в форме;убедитесь, что это шрифт Unicode (например, Arial Unicode MS).

0 голосов
/ 07 апреля 2011

Решение опубликовано здесь: http://inputsimulator.codeplex.com/discussions/214858

Разработчик сказал, что он "должен скоро выпустить" в ноябре ... В настоящее время я сам занимаюсь редактированием .dll.Похоже, только 2 строки изменений.Я отправлю еще раз, если выясню, как.

0 голосов
/ 01 марта 2011

Я взглянул на внутреннюю часть библиотеки, и суть проблемы должна лежать в функции InputBuilder.AddCharacter, где символы переводятся в WM_KEYUP / WM_KEYDOWN сообщения;тем не менее, он, похоже, хорошо работает в соответствии с документацией SendInput и структуры KEYBDINPUT.

Я подозреваю, что, будучи wScan a WORDПараметр, он не может поддерживать символы Юникода вне BMP, но это не объясняет, почему ваш персонаж (который должен определенно лежать внутри него) не вставлен правильно.

Еще один подозрение заключается в том, чтоцелевое приложение не обрабатывает правильно те «специальные» WM_KEYUP / WM_KEYDOWN (которые имеют wParam VK_PACKET и переводятся в WM_CHAR с черной магией);у вас есть такая проблема с каждым приложением?

...