C# - 剪贴板挂钩检查被复制的数据是真的是图像还是文本?

时间:2014-09-06 16:15:20

标签: c# hook clipboard

我有一个小程序正在监听图像的剪贴板(钩子)。如果通过ctrl + c等存储或复制图像,我的程序会自动将图像粘贴到打开的文档doc。

代码:

if (Clipboard.ContainsImage())
{
  IDataObject obj = Clipboard.GetDataObject();
  if (obj.GetDataPresent(DataFormats.Bitmap))
   {
    Microsoft.Office.Interop.Word.Range range = thefile.Bookmarks.get_Item(@"\endofdoc").Range;
   range.Paste();
   newdoc.Selection.EndKey(WdUnits.wdStory);
   }
}

我只是不明白为什么某个应用程序中的文本被复制到doc,实际上我只是在寻找位图数据格式(基于我的代码)。有没有办法检查被复制的数据是真的是图像还是文本?我没有问题做printcreen但是每次我从某个应用程序复制文本(我相信在ctrl + c之后现在存储在剪贴板中),文本被认为是图像?

1 个答案:

答案 0 :(得分:0)

我认为原因是剪贴板可以同时包含各种格式数据,例如文本和位图。 因此,当您运行range.Paste()并且剪贴板包含文本和位图数据时,将复制文本数据。

为避免出现这种意外行为,您只需通过调用Clipboard.GetImage()从剪贴板获取图像数据,然后将其粘贴到您的文字doc。

不幸的是我无法找到任何简单的方法,但this answer可能会有所帮助(即将剪贴板图像数据写入文件,然后调用Shapes.AddPicture以显示图像word doc)。