0

我想知道如何获得选定的文本。(通常通过鼠标拖动或文本上的 shift + 箭头来完成)

从记事本、word、Internet Explorer 地址栏等

发送 WM_GETTEXT 只是复制标题,而我在文件资源管理器上重命名文件名时无法复制选定的文本。

所以,我正在考虑模拟 Ctrl+C。但模拟击键似乎不是一个好主意。因为它会产生副作用。(如果 Ctrl+C 分配给其他功能)

我尝试了以下代码,希望将当前选定的文本复制到剪贴板

OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT,0);
CloseClipboard();

但没有运气,它只是空剪贴板。

如何复制当前选定的文本?

(模拟 Ctrl+c 没有不可预知的效果)

谢谢!(我的环境是 Windows 7,C 编程语言,winapi)

4

2 回答 2

0

我不确定是否有一个通用的答案,因为您提到的各种应用程序使用不同的窗口类。
特别是对于记事本:显示区域似乎是一个简单的EDIT控件。您可以使用EM_GETSEL消息检索所选文本的开头和结尾,然后用于WM_GETTEXT获取完整文本。不要使用GetWindowText,因为它不适用于另一个进程的窗口。一般来说,您可以尝试使用该WM_COPY消息。这应该将文本放在剪贴板中。但是,结果取决于该消息处理程序在其他应用程序中的实现方式。

于 2013-10-11T07:51:28.553 回答
0

您正在使用SetClipboardData(CF_TEXT, 0)- MSDN Doc设置剪贴板,如果第二个参数为 NULL,则窗口必须处理 WM_RENDERFORMAT 和 WM_RENDERALLFORMATS 消息;同一篇文章对如何分配全局内存有评论,用所需的文本填充它并将其传递给SetClipboardData().

于 2013-10-11T09:10:32.797 回答