WinAPI:在不使用剪贴板的情况下选择活动窗口的文本

时间:2016-03-18 11:59:10

标签: winapi textselection

我知道您可以通过发送WM_COPY消息然后阅读剪贴板的新内容来获取文本选择。
但Windows如何在将文本选择存储到剪贴板之前首先检索文本选择?我的意思是必须有一种方法来获取文本而不将其发送到剪贴板,对吧? 但我在网上找到的所有内容都是写入剪贴板然后快速恢复旧内容的解决方法。但这并不是我所寻找的。

(这个问题与特定的编程语言无关。)

1 个答案:

答案 0 :(得分:1)

只需将EM_GETSEL发送到控件,然后使用GetWindowText获取完整控件文本并仅提取选择。

您可能已经猜到这不如WM_COPY有效 这是因为 Edit 控件并不是为了处理大文本,为此(以及其他目的)有 RichEditText 控件。

它允许您使用以下方式执行一些有效的复制:

  1. EM_GETSELTEXT仅获取所选文字。您仍然需要知道要分配多少空间:使用 EM_GETSEL EM_EXGELSEL这是微不足道的。

  2. 使用 EM_GETSEL (或等效文件),然后使用EM_STREAMOUT流式传输文字。

  3. 毋庸置疑,所有这一切都是通过一个API SendMessage完成的,如果不是这样,你必须对此充满信心。