不好意思,我也不知道这个问题去哪个栏目问,该在那个编程语言板块,我就都问问吧,总有懂的人!
就是比如我复制一个网页的内容,其中有文本,也有图片,
要是把他粘贴到一个*.txt里,他就粘贴出来是一个纯字符串;
要是把他粘贴到一个word文档里,他就是包含html 标签和 css 样式的一段排好版的文字;
要是把他粘贴到 QQ聊天窗口,就是 图片 + 字符串,
我就不明白我剪切板里到底是个什么东西?
这个东西是用什么编码的?
其实为问这个的目的,就是想重新编码剪切板..
以下针对Win32进行讨论。@aristotll 的答案中提到了Notepad++的选择性粘贴,于是我按图索骥,找到了对应的源码,摘录如下:
case IDM_EDIT_PASTE_AS_RTF:
case IDM_EDIT_PASTE_AS_HTML:
{
LongRunningOperation op;
UINT f = RegisterClipboardFormat(id==IDM_EDIT_PASTE_AS_HTML?CF_HTML:CF_RTF);
if (!IsClipboardFormatAvailable(f))
return;
if (!OpenClipboard(NULL))
return;
HGLOBAL hglb = GetClipboardData(f);
if (hglb != NULL)
{
LPSTR lptstr = (LPSTR)GlobalLock(hglb);
if (lptstr != NULL)
{
// Call the application-defined ReplaceSelection
// function to insert the text and repaint the
// window.
_pEditView->execute(SCI_REPLACESEL, 0, (LPARAM)lptstr);
GlobalUnlock(hglb);
}
}
CloseClipboard();
}
break;
由此可以看出,剪贴板格式并非有限种,而是可以用RegisterClipboardFormat()
自行定义的。更多细节可参考MSDN上的相关资料。
我之前写过一个《你的笔记本里有几个剪切板?》。但具体这剪切板怎么工作,我也不知道。搜了一下 Stack Overflow,这个链接可能有帮助:Clipboard Operations (Windows)。在 Paste Operations 下面说了,系统剪切板可以导出不同的格式,一个窗口可以设置自己的粘贴格式,比如记事本可以就只能获取文本内容,而 Word 还可以获取其中的图片,乃至文本格式,等等。
外,不得不提的是,不同操作系统的剪切板是不一样的。比如:Linux 下面复制一个文件,其实是复制了文件路径……和 Windows 上面的情况大大不同。
关于剪切板,这里可能给出了所有答案:hluk/CopyQ: Clipboard manager with advanced features。安装试了一下,效果不错,从 Word 里和网页上拷贝的东西都能挺好的显示出来:
其他一些参考链接:
从浏览器复制一段文字,粘贴到 Evernote 客户端(Windows),Evernote 为什么能得到原网页的网址呢?不会有安全问题么? - 葛致良的回答 - 知乎