C# 2.0 中怎么监视剪贴板的动作,比如当将数据放入剪贴板时执行我的代码,对剪贴板中的数据进行查看,是否是指定的格式.
解决方案 »
- checkbox列的选中问题
- winform 怎样修改鼠标在ZedGraph中的光标??
- 对DataGridView中选中的一些行进行删除,同时在数据库中删除记录
- vs2005的CrystalReports控件有没有版权啊
- 在安装程序中注册COM的问题
- 如何把一个放在内嵌资源里的exe文件释放到指定的一个目录?
- 请问如何使用C#来控制Windows 2000 Server 中的DNS服务功能?急!
- C#如何让实现SOAP通信,做好有源码?
- 关于RichTextBox的问题
- 如何将服务器控件值赋给客户端?自已搞了很多天也没搞定,求助
- 如何美化application界面?
- 大家说这个网页采集程序的速度是快还是慢呢?
protected static extern int SetClipboardViewer(int hWndNewViewer); [DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); [DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
IntPtr nextClipboardViewer;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// defined in winuser.h
const 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;
else
SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);
break; default:
base.WndProc(ref m);
break;
}
}
private void Form1_Closed(object sender, System.EventArgs e)
{
ChangeClipboardChain(this.Handle,NextClipHwnd);
//从观察链中删除本观察窗口
SendMessage(NextClipHwnd,WM_CHANGECBCHAIN,this.Handle,NextClipHwnd);
//将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
}
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);
else
richTextBox1.Text = "[Clipboard data is not RTF or ASCII Text]";
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}
}