zoukankan      html  css  js  c++  java
  • 将截图图片放入内存(剪贴板)中

     今天做一截图工具,发现能截图,但是点击Ctrl+V复制出来的根本不是图像,

    查看代码,发现根本没有 将图片放入剪贴板,以便使用Ctrl+V复制的功能

    搜了下,发现很简单,就一句话: Clipboard.SetImage(bmp);

    Clipboard类的其他功能如下,能实现带格式文本复制或者单纯文本复制,

    还能实现快捷键重置功能

    using System;

    using System.Collections.Specialized;

    using System.Drawing;

    using System.IO;

     

    namespace System.Windows.Forms

    {

        // 摘要:

        //     提供将数据置于系统剪贴板中以及从中检索数据的方法。无法继承此类。

        public sealed class Clipboard

        {

            // 摘要:

            //     从剪贴板中移除所有数据。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static void Clear();

            //

            // 摘要:

            //     指示在剪贴板中是否存在 System.Windows.Forms.DataFormats.WaveAudio 格式的数据。

            //

            // 返回结果:

            //     如果剪贴板中有音频数据,则为 true;否则为,false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static bool ContainsAudio();

            //

            // 摘要:

            //     指示剪贴板中是否存在指定格式的数据,或可转换成此格式的数据。

            //

            // 参数:

            //   format:

            //     要查找的数据格式。请参见 System.Windows.Forms.DataFormats 以获取预定义的格式。

            //

            // 返回结果:

            //     如果在剪贴板中存在指定 format 或可以转换成该格式的数据,则为 true;否则为 false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static bool ContainsData(string format);

            //

            // 摘要:

            //     指示剪贴板中是否存在 System.Windows.Forms.DataFormats.FileDrop 格式或可转换成此格式的数据。

            //

            // 返回结果:

            //     如果剪贴板中有文件放置列表,则为 true;否则为,false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static bool ContainsFileDropList();

            //

            // 摘要:

            //     指示剪贴板中是否存在 System.Windows.Forms.DataFormats.Bitmap 格式或可转换成此格式的数据。

            //

            // 返回结果:

            //     如果剪贴板中存在图像数据,则为 true;否则为,false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static bool ContainsImage();

            //

            // 摘要:

            //     指示剪贴板中是否存在 System.Windows.Forms.TextDataFormat.Text System.Windows.Forms.TextDataFormat.UnicodeText

            //     格式的数据(取决于操作系统)。

            //

            // 返回结果:

            //     如果剪贴板中存在文本数据,则为 true;否则为,false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static bool ContainsText();

            //

            // 摘要:

            //     指示剪贴板中是否存在具有指定的 System.Windows.Forms.TextDataFormat 值所指示的格式的文本数据。

            //

            // 参数:

            //   format:

            //     System.Windows.Forms.TextDataFormat 值之一。

            //

            // 返回结果:

            //     如果剪贴板中存在格式值为指定 format 的文本数据,则为 true;否则为 false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ComponentModel.InvalidEnumArgumentException:

            //     format 不是有效的 System.Windows.Forms.TextDataFormat 值。

            public static bool ContainsText(TextDataFormat format);

            //

            // 摘要:

            //     检索剪贴板上的音频流。

            //

            // 返回结果:

            //     包含音频数据的 System.IO.Stream;如果剪贴板不包含任何 System.Windows.Forms.DataFormats.WaveAudio

            //     格式的数据,则为 null。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static Stream GetAudioStream();

            //

            // 摘要:

            //     从剪贴板中检索指定格式的数据。

            //

            // 参数:

            //   format:

            //     要检索的数据的格式。请参见 System.Windows.Forms.DataFormats 以获取预定义的格式。

            //

            // 返回结果:

            //     表示剪贴板数据的 System.Object;如果剪贴板中包含的数据都不是指定 format,也无法转换为该格式,则为 null。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static object GetData(string format);

            //

            // 摘要:

            //     检索当前位于系统剪贴板中的数据。

            //

            // 返回结果:

            //     System.Windows.Forms.IDataObject,表示系统剪贴板中当前的数据;如果剪贴板中没有数据,则为 null。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     从剪贴板中检索不到数据。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下,且 System.Windows.Forms.Application.MessageLoop 属性值为

            //     true。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static IDataObject GetDataObject();

            //

            // 摘要:

            //     从剪贴板中检索文件名的集合。

            //

            // 返回结果:

            //     包含文件名的 System.Collections.Specialized.StringCollection;如果剪贴板中不包含任何格式为 System.Windows.Forms.DataFormats.FileDrop

            //     或可转换为该格式的数据,则为 null。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static StringCollection GetFileDropList();

            //

            // 摘要:

            //     检索剪贴板上的图像。

            //

            // 返回结果:

            //     表示剪贴板图像数据的 System.Drawing.Image;如果剪贴板中不包含任何 System.Windows.Forms.DataFormats.Bitmap

            //     格式或可转换成该格式的数据,则为 null。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static Image GetImage();

            //

            // 摘要:

            //     从剪贴板中检索 System.Windows.Forms.TextDataFormat.Text System.Windows.Forms.TextDataFormat.UnicodeText

            //     格式的文本数据(取决于操作系统)。

            //

            // 返回结果:

            //     剪贴板文本数据;如果剪贴板中不包含 System.Windows.Forms.TextDataFormat.Text System.Windows.Forms.TextDataFormat.UnicodeText

            //     格式的数据(取决于操作系统),则为 System.String.Empty。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            public static string GetText();

            //

            // 摘要:

            //     从剪贴板中检索由指定的 System.Windows.Forms.TextDataFormat 值表示的格式的文本数据。

            //

            // 参数:

            //   format:

            //     System.Windows.Forms.TextDataFormat 值之一。

            //

            // 返回结果:

            //     剪贴板文本数据;如果剪贴板中不包含指定格式的数据,则为 System.String.Empty

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ComponentModel.InvalidEnumArgumentException:

            //     format 不是有效的 System.Windows.Forms.TextDataFormat 值。

            public static string GetText(TextDataFormat format);

            //

            // 摘要:

            //     将 System.Byte 数组转换成 System.IO.Stream 之后,将该数组添加到格式为 System.Windows.Forms.DataFormats.WaveAudio

            //     的剪贴板中。

            //

            // 参数:

            //   audioBytes:

            //     包含音频数据的 System.Byte 数组。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     audioBytes 为 null。

            public static void SetAudio(byte[] audioBytes);

            //

            // 摘要:

            //     System.Windows.Forms.DataFormats.WaveAudio 格式的 System.IO.Stream 添加到剪贴板中。

            //

            // 参数:

            //   audioStream:

            //     包含音频数据的 System.IO.Stream。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     audioStream 为 null。

            public static void SetAudio(Stream audioStream);

            //

            // 摘要:

            //     将指定格式的数据添加到剪贴板中。

            //

            // 参数:

            //   format:

            //     要设置的数据格式。请参见 System.Windows.Forms.DataFormats 以获取预定义的格式。

            //

            //   data:

            //     表示要添加的数据的 System.Object。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     data 为 null。

            public static void SetData(string format, object data);

            //

            // 摘要:

            //     将非持久性数据置于系统剪贴板中。

            //

            // 参数:

            //   data:

            //     要置于剪贴板中的数据。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能将数据置于剪贴板中。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     data 的值为 null。

            public static void SetDataObject(object data);

            //

            // 摘要:

            //     将数据置于系统剪贴板中,并指定在退出应用程序后是否将数据保留在剪贴板中。

            //

            // 参数:

            //   data:

            //     要置于剪贴板中的数据。

            //

            //   copy:

            //     如果想在退出应用程序后将数据保留在剪贴板中,则为 true;否则为 false。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能将数据置于剪贴板中。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     data 的值为 null。

            public static void SetDataObject(object data, bool copy);

            //

            // 摘要:

            //     尝试指定的次数,以将数据置于系统剪贴板中,且两次尝试之间具有指定的延迟,可以选择在退出应用程序后将数据保留在剪贴板中。

            //

            // 参数:

            //   data:

            //     要置于剪贴板中的数据。

            //

            //   copy:

            //     如果想在退出应用程序后将数据保留在剪贴板中,则为 true;否则为 false。

            //

            //   retryTimes:

            //     尝试将数据置于剪贴板中的次数。

            //

            //   retryDelay:

            //     两次尝试之间暂停的毫秒数。

            //

            // 异常:

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     data 为 null。

            //

            //   System.ArgumentOutOfRangeException:

            //     retryTimes 小于零。- 或 -retryDelay 小于零。

            //

            //   System.Runtime.InteropServices.ExternalException:

            //     未能将数据置于剪贴板中。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            public static void SetDataObject(object data, bool copy, int retryTimes, int retryDelay);

            //

            // 摘要:

            //     System.Windows.Forms.DataFormats.FileDrop 格式的文件名集合添加到剪贴板中。

            //

            // 参数:

            //   filePaths:

            //     包含这些文件名的 System.Collections.Specialized.StringCollection

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     filePaths 为 null。

            //

            //   System.ArgumentException:

            //     filePaths 中不包含任何字符串。- 或 -在 filePaths 中至少有一个字符串为以下情况之一:为 System.String.Empty、仅包含空白、包含一个或多个

            //     System.IO.Path.InvalidPathChars 定义的无效字符、值为 null、包含冒号 (:)、或超出系统定义的最大长度。有关更多信息,请参见

            //     System.ArgumentException System.Exception.InnerException 属性。

            public static void SetFileDropList(StringCollection filePaths);

            //

            // 摘要:

            //     System.Windows.Forms.DataFormats.Bitmap 格式的 System.Drawing.Image 添加到剪贴板中。

            //

            // 参数:

            //   image:

            //     要添加到剪贴板中的 System.Drawing.Image。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     image 为 null。

            public static void SetImage(Image image);

            //

            // 摘要:

            //     System.Windows.Forms.TextDataFormat.Text 或 System.Windows.Forms.TextDataFormat.UnicodeText

            //     格式的文本数据添加到剪贴板中(取决于操作系统)。

            //

            // 参数:

            //   text:

            //     要添加到剪贴板中的文本。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     text 为 null 或 System.String.Empty。

            public static void SetText(string text);

            //

            // 摘要:

            //     将文本数据添加到剪贴板中,该数据的格式由指定的 System.Windows.Forms.TextDataFormat 值指示。

            //

            // 参数:

            //   text:

            //     要添加到剪贴板中的文本。

            //

            //   format:

            //     System.Windows.Forms.TextDataFormat 值之一。

            //

            // 异常:

            //   System.Runtime.InteropServices.ExternalException:

            //     未能清空剪贴板。这种情况通常发生在剪贴板正在被其他进程使用的时候。

            //

            //   System.Threading.ThreadStateException:

            //     当前线程未处于单线程单元 (STA) 模式下。请将 System.STAThreadAttribute 添加到应用程序的 Main 方法中。

            //

            //   System.ArgumentNullException:

            //     text 为 null 或 System.String.Empty。

            //

            //   System.ComponentModel.InvalidEnumArgumentException:

            //     format 不是有效的 System.Windows.Forms.TextDataFormat 值。

            public static void SetText(string text, TextDataFormat format);

        }

    }

  • 相关阅读:
    mmap 函数
    poisx 文件锁
    三次握手的第三个ACK包丢了,TCP的处理方式
    unix 网络编程第八章 UDP
    STDIN_FILENO vs stdin
    unix 网络编程 第七章
    select 实现分析,poll epoll
    pselect 和 select
    export LANG="zh_CN.UTF-8"
    Unix 网络编程 I/O 模型 第六章
  • 原文地址:https://www.cnblogs.com/zp89850/p/2153379.html
Copyright © 2011-2022 走看看