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

WinAPI:在不使用剪贴板的情况下获取活动窗口的文本选择,winapi,textselection,Winapi,Textselection,我知道您可以通过发送消息,然后读取剪贴板上的新内容来获取文本选择。 但是,Windows如何在文本选择存储到剪贴板之前首先检索它?我的意思是必须有一种方法来获取文本而不将其发送到剪贴板,对吗? 但我能在网上找到的只是一种变通方法,即写入剪贴板,然后快速恢复旧内容。。但这不是我想要的 (这个问题与特定的编程语言无关。)只需发送到控件,然后使用以获取完整的控件文本并仅提取所选内容 正如您可能已经猜到的,这不如WM\u COPY 这是因为编辑控件不是用来处理大量文本的,因此(以及其他用途)有RichE

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

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

只需发送到控件,然后使用以获取完整的控件文本并仅提取所选内容

正如您可能已经猜到的,这不如
WM\u COPY

这是因为编辑控件不是用来处理大量文本的,因此(以及其他用途)有RichEditText控件

它允许您通过以下两种方式进行高效复制:

  • 仅获取所选文本。您仍然需要知道要分配多少空间:对于EM_GETSEL或,这是微不足道的

  • 使用EM_GETSEL(或等效工具),然后使用流媒体传输文本


  • 不用说,所有这些都是通过一个API
    SendMessage
    完成的,如果还没有,您必须对它充满信心

    在这样的场景中使用的官方的、有文档记录的和受支持的API是:“正如你可能已经猜到的,这不如WM_COPY那么有效”-你有任何支持该声明的参考资料吗?为什么打开剪贴板、将数据复制到全局内存以及清理(除了检索控件内容之外)比检索控件内容更有效?因此我必须找出我正在处理的控件类型,然后我需要找出要发送的适当消息是什么?自定义控件的访问方式是否相同?Windows如何确定要发送的消息等?@Forivin:请参阅我对您答案的评论。这是处理自定义控件或无窗口控件(例如,对于Qt应用程序非常常见)时的唯一选项。@IInspectable您无法仅提取选定的文本;您必须从控件中提取所有文本,然后“子字符串”它。
    VM\u COPY
    由控件本身处理,因此它只能复制所选文本。如果提取小文本,速度会更快,我的观点是它不会缩放。