使用 PostMessage 发送 Unicode 字符

Using PostMessage to send Unicode characters

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

迈克尔的书

撇号不是真的,它不是 ASCII 39,而是 unicode U+2019。当它一次跨 1 个字符发送时,它作为 unicode 值丢失并作为构成 unicode

的原始字符登陆

迈克尔的书

如果我复制并粘贴到 window 中,它可以正常运行,如果我将文本文件加载到 window 中,它也可以正常加载。所以接收window是可以接收到unicode的,但是我发送的方式一定是不正确的。任何帮助将不胜感激。

  private void SendKeysToForm(string Message)
    {
        for (int i = 0; i < Message.Length; i++)
        {
            PostMessage(hwnd, WM_CHAR, (IntPtr)Message[i], IntPtr.Zero);
        }
    }

根据 MSDN documentation,要发送 Unicode,您需要使用 PostMessageW

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

更新

正如 Hans 所说的那样,更好的方法是设置 DllImportCharSet:

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

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

非常感谢汉斯!