c# - 使用 PostMessage 发送 Unicode 字符

标签 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);
        }
    }

最佳答案

根据 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

非常感谢汉斯!

关于c# - 使用 PostMessage 发送 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223948/

相关文章:

c++ - HWND 鼠标悬停时改变光标

c# - 获取所有匹配项的索引

c# - 在 Aspx.cs 中调用函数并更改下拉框

c# - 如何使用 C# 为我的 WinRT 应用程序生成 MD5 哈希码?

python - 将元组的 Unicode 输出转换为字符串 Python

python - 不是 "\u": How to Unescape Unicode in JSON?

c# - 如何区分电子邮件Imap中的内联图像和签名以及其他空白图像

Python 打印结果为 '7\xe6\x9c\x8810\xe6\x97\xa5' ,但我想要 '7月10日'

windows - 有什么方法可以确定程序是否使用特定的 Windows API 函数?

c# - 使用 C# 从任何窗口捕获突出显示的文本