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

标签 winapi textselection

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

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

最佳答案

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

正如您可能已经猜到的那样,这不如 WM_COPY 高效。
这是因为 Edit 控件不适合处理巨大的文本,为此(和其他目的)有 RichEditText 控件。

它允许您通过以下方式进行一些有效的复制:

  1. EM_GETSELTEXT仅获取选定的文本。您仍然需要知道要分配多少空间:这对于 EM_GETSELEM_EXGELSEL 来说是微不足道的。 .

  2. 使用 EM_GETSEL (或等效项),然后使用 EM_STREAMOUT 流式传输文本.

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

关于WinAPI:在不使用剪贴板的情况下获取事件窗口的文本选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36083784/

相关文章:

c++ - 选项卡控件 : Partial paint when restoring dialogbox

delphi - 当迭代表单上的控件时,如何识别特定按钮?

android - 在对话框中选择文本后,ActionBar 中的文本选择工具在白色背景上为白色

jQuery:通过标签名称标记(选择)内容文本,无需 ID

ios - 如何获取 UIWebView 中选中文本的坐标(CGRect)?

c++ - 如何限制用户只能选择某些驱动器?

delphi - 是什么原因导致 "Bad Process ID"?

c - 如何读取子进程的输出?

css -::selection 和 WebKit 的奇怪行为

javascript - Android:window.getSelection() 在 webview 中不起作用