HTML建网站,会计公司网站模板,惠阳东莞网站建设,房产交易中心官网##1、常规方法 在C#中#xff0c;有一个常规检测剪贴板的方法#xff0c;用的是 System.Windows.Forms.Clipboard#xff1b;
使用起来很简单#xff0c;代码如下#xff1a;
/// summary
/// 设置剪贴板的文本内容
/// /summary
/// param name有一个常规检测剪贴板的方法用的是 System.Windows.Forms.Clipboard
使用起来很简单代码如下
/// summary
/// 设置剪贴板的文本内容
/// /summary
/// param names文本内容/param
public static void SetText(string s)
{Clipboard.SetDataObject(s ?? );
}/// summary
/// 获取剪贴板中的文本内容
/// /summary
/// returns返回剪贴板文本/returns
public static string GetText()
{IDataObject iData Clipboard.GetDataObject();return (string)iData.GetData(DataFormats.Text);
}/// summary
/// 获取剪贴板位图格式数据比如从画图软件里复制的图片……
/// /summary
/// returns位图/returns
public static Bitmap GetBitmap()
{IDataObject iData Clipboard.GetDataObject();//确定此实例中存储的数据是否与指定的格式关联或是否可以转换成指定的格式if (iData.GetDataPresent(DataFormats.Bitmap)){Bitmap bt (Bitmap)iData.GetData(DataFormats.Bitmap);return bt;}return null;
}##2、通知检测剪贴板 常规方法没有通知来告诉我们有数据所以再来一个带通知的方案
这个代码比较长……
public partial class Form2 : Form
{IntPtr nextClipboardViewer;public Form2(){InitializeComponent();nextClipboardViewer (IntPtr)SetClipboardViewer((int)Handle);}/// summary/// 要处理的 WindowsSystem.Windows.Forms.Message。/// /summary/// param namem/paramprotected override void WndProc(ref Message m){// defined in winuser.hconst int WM_DRAWCLIPBOARD 0x308;const int WM_CHANGECBCHAIN 0x030D;switch (m.Msg){case WM_DRAWCLIPBOARD:DisplayClipboardData();SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);break;case WM_CHANGECBCHAIN:if (m.WParam nextClipboardViewer)nextClipboardViewer m.LParam;elseSendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);break;default:base.WndProc(ref m);break;}}/// summary/// 显示剪贴板内容/// /summarypublic void DisplayClipboardData(){try{IDataObject iData new DataObject();iData Clipboard.GetDataObject();if (iData.GetDataPresent(DataFormats.Rtf))richTextBox1.Rtf (string)iData.GetData(DataFormats.Rtf);else if (iData.GetDataPresent(DataFormats.Text))richTextBox1.Text (string)iData.GetData(DataFormats.Text);elserichTextBox1.Text [Clipboard data is not RTF or ASCII Text];}catch (Exception e){MessageBox.Show(e.ToString());}}/// summary/// 关闭程序从观察链移除/// /summary/// param namesender/param/// param namee/paramprivate void Form2_FormClosed(object sender, FormClosedEventArgs e){ChangeClipboardChain(Handle, nextClipboardViewer);}#region WindowsAPI/// summary/// 将CWnd加入一个窗口链每当剪贴板的内容发生变化时就会通知这些窗口/// /summary/// param namehWndNewViewer句柄/param/// returns返回剪贴板观察器链中下一个窗口的句柄/returns[DllImport(User32.dll)]protected static extern int SetClipboardViewer(int hWndNewViewer);/// summary/// 从剪贴板链中移出的窗口句柄/// /summary/// param namehWndRemove从剪贴板链中移出的窗口句柄/param/// param namehWndNewNexthWndRemove的下一个在剪贴板链中的窗口句柄/param/// returns如果成功非零;否则为0。/returns[DllImport(User32.dll, CharSet CharSet.Auto)]public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);/// summary/// 将指定的消息发送到一个或多个窗口/// /summary/// param namehwnd其窗口程序将接收消息的窗口的句柄/param/// param namewMsg指定被发送的消息/param/// param namewParam指定附加的消息特定信息/param/// param namelParam指定附加的消息特定信息/param/// returns消息处理的结果/returns[DllImport(user32.dll, CharSet CharSet.Auto)]public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);#endregion
}认真看一下并不难理解这种带通知的方式更方便操作。
##3、代码 另外代码打了个包Form1是方案一Form2是方案二 下载
如果没有积分可以关注公众号拿下载地址【大鱼code】