在C# richtextbox中调用Win32 API SendMessage复制所选文本返回少一个字符

发布于 2024-08-13 22:31:31 字数 423 浏览 2 评论 0原文

我正在尝试使用 win32 API SendMessage 复制活动窗口中的选定文本 如下所示

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, out int wParam, out int lParam);
int start,next;
SendMessage(activeWindowHandle, 0xB0, out start, out next);

这将返回所选文本的开始和结束字符位置。 这在记事本或任何 System.Windows.Forms.TextBox 中都可以正常工作。 但为 System.Windows.Forms.RichTextBox 调用此方法会返回少一个字符。 有人知道为什么吗?以及如何解决这个问题。

I am trying to copy the selected text in the active window using the win32 API SendMessage
as following

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, out int wParam, out int lParam);
int start,next;
SendMessage(activeWindowHandle, 0xB0, out start, out next);

This returns the starting and ending character position of the selected text.
This works fine in notepad or any System.Windows.Forms.TextBox.
But calling this for a System.Windows.Forms.RichTextBox returns one character less.
anyone know why?? and how to work around this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

提笔落墨 2024-08-20 22:31:31

SendMessage 实际上应该是

public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

wParam 和 lParam 实际上是输入,而不是输出。因此,你发送的是垃圾,很幸运能得到一些东西。

SendMessage should actually be

public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

wParam and lParam are in fact inputs, not outputs. Hence, you're sending garbage, and lucky to get something back.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文