Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以干净的编程方式将图像添加到剪贴板并粘贴它们?_C#_Image_Bitmap_Clipboard_Registerhotkey - Fatal编程技术网

C# 如何以干净的编程方式将图像添加到剪贴板并粘贴它们?

C# 如何以干净的编程方式将图像添加到剪贴板并粘贴它们?,c#,image,bitmap,clipboard,registerhotkey,C#,Image,Bitmap,Clipboard,Registerhotkey,我有一个全局注册的热键,工作正常,该热键内有以下代码: { Clipboard.SetDataObject(Properties.Resources.cookie); SendKeys.SendWait("^v"); } 它将cookie图像添加到我的剪贴板,并将其粘贴到激活的任何窗口中。但是,它只能在第一次正常工作并粘贴图像 第二次我得到: System.Windows.Forms.dll中首次出现类型为“Sys

我有一个全局注册的热键,工作正常,该热键内有以下代码:

        {
            Clipboard.SetDataObject(Properties.Resources.cookie);
            SendKeys.SendWait("^v");
        }
它将cookie图像添加到我的剪贴板,并将其粘贴到激活的任何窗口中。但是,它只能在第一次正常工作并粘贴图像

第二次我得到: System.Windows.Forms.dll中首次出现类型为“System.Runtime.InteropServices.COMException”的异常

这会弹出:

然而,只有当程序有这个选项时才会弹出,否则什么也不会发生(但我仍然会得到异常错误)


但是如果我手动按ctrl+V。。。每次都可以使用:S

剪贴板类有一种可能更适合您的不同方法:

Clipboard.SetImage(...);
仅设置
DataObject
时,还可以指定对象的类型。这也是一个可行的选择,可能以同样的方式工作,但使用适当的方法似乎。。好。。更合适

另一个重要注意事项:


Clipboard
方法只在“单单元”线程上工作,因此如果您没有在UI线程上执行操作,则应确保将线程的状态设置为
STA

我刚刚注意到,剪贴板中未压缩的位图版本要大10倍。是否可以将实际的png保存到剪贴板而不是图像数据?您可以尝试使用一些Windows API,但它可能会用作
clipboard.SetImage
方法。如果使用剪贴板查看器()将图像加载到剪贴板,然后从剪贴板查看器将图像保存为200k,而不是20k,那么您说的10倍大,是指宽度和高度?没有kb。我需要它尽可能小。。。(因为剪贴板中的图像已解压缩?)。顺便说一句:SetImage给出了相同的结果。我要尝试的第一件事是将数据重新保存到
图像
位图
对象中,使用这些和这些图像设置来选择分辨率,等等,然后将该对象与
Clipboard.SetImage
方法一起使用。尝试使用
Clipboard.Clear
方法,然后再将任何内容设置到该对象中。