我正在使用 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 }\nRun Code Online (Sandbox Code Playgroud)\n
根据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。
非常感谢汉斯!