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

标签 c# hook clipboard

我有一个小程序正在监听图像的剪贴板( Hook )。如果有存储或通过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 文档中。

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

关于C# - 剪贴板 Hook 检查正在复制的数据是真的图像还是文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702193/

相关文章:

windows - 使用 Windows Control-C 剪贴板复制时如何保留制表符 `n` n?

c# - Azure WebJob 在同一主机上调用 WebAPI

winapi - VB6 在使用事件 Windows 消息 Hook 进行调试时退出

python - 如何使用 python 或 CL 将文件复制到剪贴板,稍后使用 STRG+V 粘贴它?

c# - 剪贴板监听器事件被调用两次

c++ - 无法在 Hook 中获取 WM_TOUCH 消息

c# - 无法与 wss ://echo. websocket.org/with UnitySocketIO 握手

c# - 使用 @@ROWCOUNT 的旧 SQL 函数会导致问题

c# - 如何在 winforms 的 datagridview 中将字符串排序为数字

python - 获取变更组中的变更集列表(mercurial python hook)