我怎样才能获得选定的文字

时间:2013-10-11 04:35:20

标签: c winapi text copy selection

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

来自记事本,word,Internet Explorer地址栏等

发送WM_GETTEXT只是复制标题,并且在我重命名文件浏览器上的文件名时无法复制所选文本。

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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