2011-03-01 30 views
1

我写了一个应用程序,用户可以注册自定义全局热键。当这些热键按下时,它们会将给定的文本发送到活动窗体。我正在使用InputSimulator libray来执行此操作。但是,当我试图让这个应用程序写入包含unicode字符的文本(例如:阿塞拜疆字母表中的“Ə”)时,它会写入“?”代替。我将这个字符替换为这个Charachter的“\ u0259”和其他十六进制代码(以及其他像“Ü”,“Ö”,“Ğ”,“Ş”,“Ç”)。但没有任何改变。我不能幻想其他库支持unicode来做这个模拟过程。如何模拟unicode文本输入到一个表格

我正在使用WindowsForms。我希望你能帮助我。谢谢!

回答

1

这可能与您在表单上使用的字体有关;确保它是一个Unicode字体(例如Arial Unicode MS)。

+0

我正在使用unicode字体。没有这个应用程序,我可以写“Ə”。所以这不是字体问题。 – 2011-03-01 18:02:15

+0

@Togrul:我明白了;我不确定你是否可以手动。 – 2011-03-01 18:05:21

+0

如果你得到“?”对于“Ə”,您的*应用程序*所使用的字体对于“Ə”没有字形。确保您的字体支持Unicode,*和*包含阿塞拜疆字形。我公司主要产品的较新版本使用Arial Unicode(可从Microsoft或Ascender Corp获得),它不特别支持阿塞拜疆语,但可能是土耳其语支持的一部分。 – DaveE 2011-03-01 18:16:23

0

我看了一下库的内部,问题的核心应该在于功能InputBuilder.AddCharacter,其中字符被转换为WM_KEYUP/WM_KEYDOWN消息;但是,根据SendInputKEYBDINPUT结构的文件,它似乎很好地完成了它的工作。

我的犯罪嫌疑人的是,作为一个wScan参数WORD,它不能支持BMP之外的Unicode字符,但这无法解释为什么你的性格(应该绝对谎言里面)没有正确插入。

另一个疑是目标应用程序不正确地处理这些“特殊” WM_KEYUP/WM_KEYDOWN(即具有如wParam中VK_PACKET并与黑色魔法WM_CHAR折算);每个应用程序都有这个问题吗?

0

一种解决方案张贴在这里: http://inputsimulator.codeplex.com/discussions/214858

dev的说,他在11月。“应该很快就会释放” ......目前,我寻找到编辑该.dll自己。看起来只有两行更改。我会再次发布,如果我弄清楚如何。

+0

非常感谢!我尝试了解决方法,但它对我没有帮助。也许这是为了旧版本,或者我做错了什么。这门课对我来说仍然是最好的解决方案。如果你修复这个unicode支持问题,请通知我。再次感谢你:) – 2011-04-08 15:58:29

+0

是的,它也没有为我工作,无法弄清楚。修复看起来很简单,但似乎是旧版本? :/ – cksubs 2011-04-15 08:17:58