Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用PostMessage发送Unicode字符_C#_Unicode_User32 - Fatal编程技术网

C# 使用PostMessage发送Unicode字符

C# 使用PostMessage发送Unicode字符,c#,unicode,user32,C#,Unicode,User32,我正在使用PostMessage向另一个应用程序中的flash对象发送输入。在我尝试发送unicode字符之前,它工作正常。在本例中: 迈克尔的书 撇号不是真正的那个,它不是ASCII 39,而是unicode U+2019。当它一次跨1个字符发送时,它将作为unicode值丢失,并作为构成unicode的原始字符着陆 迈克尔™书 如果我复制并粘贴到该窗口中,它会移动良好,如果我将文本文件加载到该窗口中,它会加载良好。因此,接收窗口能够接收unicode,但我发送它的方式一定不正确。任何帮助都将

我正在使用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);
        }
    }
private void sendKeysform(字符串消息)
{
for(int i=0;i
要发送Unicode,您需要使用
PostMessageW

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

更新 正如Hans所说,更好的方法是设置
DllImport
CharSet

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


谢谢你,汉斯

也许WM_UNICHAR会更有效。视情况而定,Adobe软件是,呃,特殊的。为什么要将字符发送为
IntPtr
而不是int?@HansPassant使用UTF-16位,
WM_UNICHAR
用于UTF-32这不是重点。关键是该窗口是使用CreateWindowExA()还是CreateWindowsExW()创建的。在Spy++中可见。顺便说一句,如果您希望Ansi窗口仍然使用Unicode字符,那么WM_UNICHAR可能会起作用。但是可以肯定,@Mike很可能正确地猜到PostMessage没有正确声明。是否最好建议正确使用CharSet属性。@HansPassant,如果有办法的话,绝对可以!我只是在文档中没有看到任何东西来验证如何在
wParam
中设置它。我错过了吗?[DllImport]属性的字符集属性。在99.99%的情况下,默认设置是错误的,因为你需要pinvoke一个winapi函数。哦,太好了,谢谢@HansPassant!我已经更新了答案。将CharSet属性添加到声明中解决了这个问题。各位