欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年05月25日 09:44:08   作者:陌香  
這篇文章主要介紹了C#操作Clipboard讀取剪切板中數(shù)據(jù)的方法,實例分析了C#讀取剪貼板數(shù)據(jù)的具體步驟與實現(xiàn)技巧,需要的朋友可以參考下

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

1 自定義一個類,并且保證它的可序列化的:實現(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)建一個數(shù)據(jù)對象,并設(shè)置數(shù)據(jù);調(diào)用Clipboard.SetDataObject()方法

4 從clipboard獲取數(shù)據(jù):調(diào)用DataObject 實例的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)
{
//獲得觀察鏈中下一個窗口句柄
NextClipHwnd = SetClipboardViewer(this.Handle);
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_DRAWCLIPBOARD:
//將WM_DRAWCLIPBOARD消息傳遞到下一個觀察鏈中的窗口
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)
{
//從觀察鏈中刪除本觀察窗口(第一個參數(shù):將要刪除的窗口的句柄;
//第二個參數(shù):觀察鏈中下一個窗口的句柄 )
ChangeClipboardChain(this.Handle, NextClipHwnd);
//將變動消息WM_CHANGECBCHAIN消息傳遞到下一個觀察鏈中的窗口
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è)計有所幫助。

相關(guān)文章

  • 詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008)

    詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+Object

    這篇文章主要介紹了ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C#?崩潰異常中研究頁堆布局的詳細(xì)過程

    C#?崩潰異常中研究頁堆布局的詳細(xì)過程

    最近遇到一位朋友的程序崩潰,發(fā)現(xiàn)崩潰點在富編輯器 msftedit 上,這個不是重點,重點在于發(fā)現(xiàn)他已經(jīng)開啟了 頁堆,由于 頁堆 和 NT堆 的內(nèi)存布局完全不一樣,這一篇結(jié)合我的了解以及 windbg 驗證來系統(tǒng)的介紹下 頁堆,需要的朋友可以參考下
    2022-10-10
  • C# 常見操作符整理

    C# 常見操作符整理

    操作符接受一個或多個參數(shù),并生成一個新值。操作符其實可以看做一個有返回值方法,但是參數(shù)的形式和調(diào)用和普通的調(diào)用不同。
    2011-02-02
  • C#編程實現(xiàn)查看剪切板內(nèi)容的方法

    C#編程實現(xiàn)查看剪切板內(nèi)容的方法

    這篇文章主要介紹了C#編程實現(xiàn)查看剪切板內(nèi)容的方法,涉及C#針對剪切板操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Unity ScrollView實現(xiàn)自動吸附效果

    Unity ScrollView實現(xiàn)自動吸附效果

    這篇文章主要為大家詳細(xì)介紹了Unity ScrollView實現(xiàn)自動吸附效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#實現(xiàn)數(shù)獨解法

    C#實現(xiàn)數(shù)獨解法

    這篇文章介紹了C#實現(xiàn)數(shù)獨解法的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C# 為String類型增加方法詳解

    C# 為String類型增加方法詳解

    下面小編就為大家?guī)硪黄狢# 為String類型增加方法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 基于WPF實現(xiàn)面包屑控件的示例代碼

    基于WPF實現(xiàn)面包屑控件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何基于WPF實現(xiàn)簡單的面包屑控件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-05-05
  • C# 計算傳入的時間距離今天的時間差

    C# 計算傳入的時間距離今天的時間差

    本文通過一段簡單的代碼給大家介紹了C# 計算傳入的時間距離今天的時間差,代碼簡單易懂,需要的朋友參考下吧
    2017-08-08
  • Unity UGUI的ContentSizeFitter內(nèi)容尺寸適應(yīng)器組件使用示例

    Unity UGUI的ContentSizeFitter內(nèi)容尺寸適應(yīng)器組件使用示例

    這篇文章主要為大家介紹了Unity UGUI的ContentSizeFitter內(nèi)容尺寸適應(yīng)器組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評論