【问题标题】:How to simulate unicode text entry to a form如何模拟表单的 unicode 文本输入
【发布时间】:2011-07-06 17:04:10
【问题描述】:

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

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

【问题讨论】:

    标签: c# unicode input simulator


    【解决方案1】:

    您在表单上使用的字体可能有问题;确保它是 unicode 字体(例如 Arial Unicode MS)。

    【讨论】:

    • 我使用的是 unicode 字体。没有这个应用程序我可以写“Ə”。所以不是字体问题。
    • 如果你得到“?”对于“Ə”,您的 应用程序 使用的字体没有“Ə”字形。确保您的字体支持 Unicode并且 包含阿塞拜疆字形。我公司主要产品的较新版本使用 Arial Unicode(可从 Microsoft 或 Ascender Corp 获得),它不专门支持阿塞拜疆语,但可能是土耳其语支持的一部分。
    • 不,不能用字体显示的字形被菱形替换。问号始终是编码问题。
    【解决方案2】:

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

    我的怀疑是,作为 wScan 一个 WORD 参数,它不能支持 BMP 之外的 Unicode 字符,但这不能解释为什么你的字符(应该肯定在它里面) 未正确插入。

    另一个怀疑是目标应用程序没有正确处理那些“特殊”WM_KEYUP/WM_KEYDOWN(具有 wParam VK_PACKET 并用黑魔法翻译成WM_CHAR);每个应用程序都有这个问题吗?

    【讨论】:

      【解决方案3】:

      这里发布了一个解决方案: http://inputsimulator.codeplex.com/discussions/214858

      开发人员说他“应该很快会在 11 月发布”...我目前正在考虑自己编辑 .dll。看起来只有 2 行更改。如果我弄清楚如何,我会再次发布。

      【讨论】:

      • 非常感谢!我尝试了该修复,但它对我不起作用。也许那是针对旧版本的,或者我做错了什么。这门课对我来说仍然是最好的解决方案。如果您解决此 Unicode 支持问题,请通知我。再次感谢你:)
      • 是的,它对我也不起作用,无法弄清楚。修复看起来很简单,但它似乎是针对旧版本的? ://
      猜你喜欢
      • 1970-01-01
      • 2020-12-20
      • 2020-10-04
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多