我想知道如何才能获得所选文字。 (通常通过鼠标拖动或移动+文本上的箭头来完成)
来自记事本,word,Internet Explorer地址栏等
发送WM_GETTEXT只是复制标题,并且在我重命名文件浏览器上的文件名时无法复制所选文本。
所以,我正在考虑模拟Ctrl + C.但模拟击键似乎不是一个好主意。因为它会产生副作用。(如果Ctrl + C分配给其他功能)
我尝试了以下代码,希望将当前选中的文本复制到剪贴板
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT,0);
CloseClipboard();
但没有运气,它只是空芯板。
如何复制当前选定的文字?
(模拟Ctrl + c,没有不可预测的效果)
谢谢! (我的环境是Windows 7,C编程语言,winapi)
答案 0 :(得分:0)
我不确定是否有一般性答案,因为您提到的各种应用程序使用不同的窗口类
特别是对于记事本:显示区域似乎是一个简单的EDIT
控件。您可以使用EM_GETSEL
消息检索所选文本的开头和结尾,然后使用WM_GETTEXT
获取完整文本。不要使用GetWindowText
,因为它不适用于其他进程的窗口。
通常,您可以尝试使用WM_COPY
消息。这应该将文本放在剪贴板中。但是,结果取决于在另一个应用程序中如何实现该消息处理程序。
答案 1 :(得分:0)
您正在使用SetClipboardData(CF_TEXT, 0)
设置剪贴板 - MSDN Doc表示如果第二个参数为NULL,则窗口必须处理WM_RENDERFORMAT和WM_RENDERALLFORMATS消息;同一篇文章评论了如何分配全局内存,用必填文本填充并将其传递给SetClipboardData()
。