国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#操作Clipboard讀取剪切板中數(shù)據(jù)實(shí)例詳解

2020-01-24 01:49:08
字體:
供稿:網(wǎng)友

本文實(shí)例講述了C#操作Clipboard讀取剪切板中數(shù)據(jù)的方法。分享給大家供大家參考。具體分析如下:

1 自定義一個(gè)類,并且保證它的可序列化的:實(shí)現(xiàn)ISerializable接口;或者用[Serializable]標(biāo)記(如果有父類,則父類也需要被標(biāo)記;可以[NonSerialized()]標(biāo)記類中不想被序列化的字段)

2 注冊自定義數(shù)據(jù)格式:調(diào)用靜態(tài)方法DataFormats.GetFormat()

3 保存數(shù)據(jù)到clipboard:利用IdataObject接口,創(chuàng)建一個(gè)數(shù)據(jù)對象,并設(shè)置數(shù)據(jù);調(diào)用Clipboard.SetDataObject()方法

4 從clipboard獲取數(shù)據(jù):調(diào)用DataObject 實(shí)例的GetDataPresent()保證數(shù)據(jù)格式與應(yīng)用程序兼容;調(diào)用IDataObject 的GetData()方法獲取數(shù)據(jù)

示例程序:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.Serialization.Formatters.Binary;namespace _ClipboardTest_{public partial class Form1 : Form{[System.Runtime.InteropServices.DllImport("user32")]private static extern IntPtr SetClipboardViewer(IntPtr hwnd);[System.Runtime.InteropServices.DllImport("user32")]private static extern IntPtr ChangeClipboardChain(IntPtr hwnd, IntPtr hWndNext);[System.Runtime.InteropServices.DllImport("user32")]private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);const int WM_DRAWCLIPBOARD = 0x308;const int WM_CHANGECBCHAIN = 0x30D;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//獲得觀察鏈中下一個(gè)窗口句柄NextClipHwnd = SetClipboardViewer(this.Handle);}protected override void WndProc(ref System.Windows.Forms.Message m){switch (m.Msg){case WM_DRAWCLIPBOARD://將WM_DRAWCLIPBOARD消息傳遞到下一個(gè)觀察鏈中的窗口SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);IDataObject iData = Clipboard.GetDataObject();//檢測文本if (iData.GetDataPresent(DataFormats.Text) | iData.GetDataPresent(DataFormats.OemText)){this.richTextBox1.Text = (String)iData.GetData(DataFormats.Text);}//檢測圖像if (iData.GetDataPresent(DataFormats.Bitmap)){pictureBox1.Image = Clipboard.GetImage();MyItem item = new MyItem();item.CopyToClipboard();}//檢測自定義類型if (iData.GetDataPresent(typeof(MyItem).FullName)){// MyItem item = (MyItem)iData.GetData(typeof(MyItem).FullName);MyItem item = GetFromClipboard();if (item != null){this.richTextBox1.Text = item.ItemName;}}break;default:base.WndProc(ref m);break;}}private void Form1_Closed(object sender, System.EventArgs e){//從觀察鏈中刪除本觀察窗口(第一個(gè)參數(shù):將要?jiǎng)h除的窗口的句柄;//第二個(gè)參數(shù):觀察鏈中下一個(gè)窗口的句柄 )ChangeClipboardChain(this.Handle, NextClipHwnd);//將變動(dòng)消息WM_CHANGECBCHAIN消息傳遞到下一個(gè)觀察鏈中的窗口SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, this.Handle, NextClipHwnd);}IntPtr NextClipHwnd;protected static MyItem GetFromClipboard(){MyItem item = null;IDataObject dataObj = Clipboard.GetDataObject();string format = typeof(MyItem).FullName;if (dataObj.GetDataPresent(format)){item = dataObj.GetData(format) as MyItem;}return item;}}[Serializable]public class MyItem{public MyItem(){itemName = "This is a Custom Item";}public string ItemName{get { return itemName; }}private string itemName;public void CopyToClipboard(){DataFormats.Format format = DataFormats.GetFormat(typeof(MyItem).FullName);IDataObject dataObj = new DataObject();dataObj.SetData(format.Name, false, this);Clipboard.SetDataObject(dataObj, false);}}}

希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永清县| 沾化县| 邹平县| 四川省| 曲沃县| 洪湖市| 普兰店市| 广德县| 仁寿县| 红桥区| 廊坊市| 普定县| 扎鲁特旗| 古丈县| 房产| 三穗县| 弋阳县| 赤水市| 观塘区| 宜城市| 冕宁县| 将乐县| 乐至县| 什邡市| 改则县| 河源市| 互助| 新乡市| 遂溪县| 文昌市| 偃师市| 永寿县| 泸州市| 伊吾县| 邹平县| 永泰县| 石城县| 伊宁市| 孙吴县| 遵化市| 潮州市|