使用PostMessage发送Unicode字符

Vin*_*mes 4 c# unicode user32

我正在使用 PostMessage 将输入发送到另一个应用程序中的 Flash 对象。在我尝试发送 unicode 字符之前它工作正常。在这个例子中:

\n\n

迈克尔\xe2\x80\x99s 书

\n\n

撇号实际上不是这样的,它不是 ASCII 39,而是 unicode U+2019。当一次发送 1 个字符时,它会作为 unicode 值丢失,并作为构成 unicode 的原始字符出现

\n\n

迈克尔\xc3\xa2\xe2\x82\xac\xe2\x84\xa2s 书

\n\n

如果我复制并粘贴到该窗口中,它会很好地移动,如果我将文本文件加载到该窗口中,它会很好地加载。所以接收窗口能够接收unicode,但我发送它的方式一定不正确。任何帮助将不胜感激。

\n\n
  private void SendKeysToForm(string Message)\n    {\n        for (int i = 0; i < Message.Length; i++)\n        {\n            PostMessage(hwnd, WM_CHAR, (IntPtr)Message[i], IntPtr.Zero);\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

Mik*_*oud 6

根据MSDN 文档,要发送 Unicode,您需要使用PostMessageW.

这是相同的方法签名,只需导入名称PostMessageW并执行即可。

更新

正如汉斯(Hans)所说,更好的方法是CharSet设置DllImport:

[DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
private static extern bool PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
Run Code Online (Sandbox Code Playgroud)

这应该会导致框架最终导入PostMessageW。

非常感谢汉斯!

  • 可能是这样,最好建议正确使用 CharSet 属性。 (3认同)