我知道您可以通过发送 WM_COPY 来获取文本选择消息,然后读取剪贴板的新内容。
但是,Windows 在将文本选择存储到剪贴板之前如何首先检索它呢?我的意思是必须有一种方法可以获取文本而不将其发送到剪贴板,对吗?
但我在网上能找到的只是写入剪贴板然后快速恢复旧内容的解决方法。但这不是我正在寻找的。
(这个问题与特定的编程语言无关。)
最佳答案
只需发送EM_GETSEL到控件,然后使用 GetWindowText获取完整的控制文本并仅提取所选内容。
正如您可能已经猜到的那样,这不如 WM_COPY
高效。
这是因为 Edit 控件不适合处理巨大的文本,为此(和其他目的)有 RichEditText 控件。
它允许您通过以下方式进行一些有效的复制:
EM_GETSELTEXT仅获取选定的文本。您仍然需要知道要分配多少空间:这对于 EM_GETSEL 或 EM_EXGELSEL 来说是微不足道的。 .
使用 EM_GETSEL (或等效项),然后使用 EM_STREAMOUT 流式传输文本.
不用说,所有这一切都是通过一个 API SendMessage
完成的,如果您还没有的话,您必须对此充满信心。
关于WinAPI:在不使用剪贴板的情况下获取事件窗口的文本选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36083784/