使用PostMessage发送Unicode字符

时间:2016-07-06 12:25:45

标签: c# unicode user32

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

迈克尔的书

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

迈克尔的书

如果我复制并粘贴到该窗口,它会移动正常,如果我将文本文件加载到该窗口,它就可以正常加载。因此接收窗口能够接收unicode,但我发送它的方式必须不正确。任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:3)

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

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

更新

正如Hans所说,更好的方法是设置CharSet的{​​{1}}:

DllImport

这应该导致框架最终导入[DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError=true)] private static extern bool PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

非常感谢汉斯!