C# 使用winapi c向RichEdit控件发送消息时出现问题#

C# 使用winapi c向RichEdit控件发送消息时出现问题#,c#,winapi,user32,richedit,C#,Winapi,User32,Richedit,我目前正在开发一种非托管外部代码的自动化解决方案,因此我在将文本设置为RichEdit控件时遇到了一些问题 我已尝试发送WM_SETTEXT,但它只将字符串的第一个字母设置为控件 我还尝试过其他方法:PostMessage、EM_SETTEXTEX、SetWindowText,我也尝试过EM_STREAMIN,但没有一个足够简单的例子来说明这条消息 richEdit的特定类为: WindowsForms10.RichEdit20W.app.0.141b42a_r14_ad1 我的代码: IntP

我目前正在开发一种非托管外部代码的自动化解决方案,因此我在将文本设置为RichEdit控件时遇到了一些问题

我已尝试发送WM_SETTEXT,但它只将字符串的第一个字母设置为控件

我还尝试过其他方法:PostMessage、EM_SETTEXTEX、SetWindowText,我也尝试过EM_STREAMIN,但没有一个足够简单的例子来说明这条消息

richEdit的特定类为: WindowsForms10.RichEdit20W.app.0.141b42a_r14_ad1

我的代码:

IntPtr Text;
string bar;

...

//Function call
setRichEditText(Text, bar);

...

//Function declaration
private static int setRichEditText(IntPtr hWnd, string text) {
    StringBuilder sb = new StringBuilder(text);
    int result = SendMessage(hWnd, WM_SETTEXT, (IntPtr)sb.Length, sb.ToString());
    return result;
}

...

//Imported function
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);
有没有办法让它设置整个字符串或解决方法?

终于解决了

曾与:

SendMessage(hWnd, WM_SETTEXT, 0, sb.ToString());
终于解决了

曾与:

SendMessage(hWnd, WM_SETTEXT, 0, sb.ToString());

闻起来你通过了UTF 16,但控件将其解释为ANSIBut。使用UI自动化不是更容易吗?
[Marshallas(UnmanagedType.LPStr)]
-这是一个bug。我使用UIAVerify、winSpy、spy++和AutomationSpy。我不能只使用一个工具,因为一个工具不能提供我所需要的一切。没有人建议使用一个工具。是一个编程接口。闻起来好像你通过了UTF 16,但控件将其解释为ANSIBut。使用UI自动化不是更容易吗?
[MarshalAs(UnmanagedType.LPStr)]
-这是一个bug。我使用UIAVerify、winSpy、spy++和AutomationSpy。我不能只使用一个工具,因为一个工具不能提供我所需要的一切。没有人建议使用一个工具。是一个编程接口。