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

C#-剪贴板挂钩检查复制的数据是真正的图像还是文本?,c#,hook,clipboard,C#,Hook,Clipboard,我有一个小程序,正在收听剪贴板(钩子)的图像。如果存在通过ctrl+c等方式存储或复制的图像,我的程序将自动将图像粘贴到打开的word文档中 代码: if (Clipboard.ContainsImage()) { IDataObject obj = Clipboard.GetDataObject(); if (obj.GetDataPresent(DataFormats.Bitmap)) { Microsoft.Office.Interop.Word.Range rang

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

代码:

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);
   }
}

我只是不明白为什么会有来自某个应用程序的文本被复制到文档中,而实际上我只是在寻找位图数据格式(基于我的代码)。有没有办法检查复制的数据是真的图像还是文本?我在使用printscreen时没有问题,但每次我都会从某个应用程序复制一个文本(我相信在执行ctrl+c后,文本现在存储在剪贴板中),该文本被视为一个图像?

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

为了避免这种意外行为,您需要通过调用
Clipboard.GetImage()
仅从剪贴板获取图像数据,然后将其粘贴到word文档中

不幸的是,我找不到任何简单的方法来实现这一点,但可能会有所帮助(例如,将剪贴板图像数据写入文件,然后调用
Shapes.AddPicture
在word文档中显示图像)