[win32]监视剪贴板内容 【转】
版权声明:
本文为博主学习过程中整理发布,如有侵权请告知
更新时间:
2017-09-30 13:41:12
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
1、调用AddClipboardFormatListener函数,指定哪个窗口有资格去捕捉剪贴板内容更新的消息。
2、处理WM_CLIPBOARDUPDATE消息,当剪贴板的内容发生变化后,消息处理程序会收到这条消息通知。
在处理WM_CLIPBOARDUPDATE消息之前,一定要先调用AddClipboardFormatListener函数,它的原型如下:
/* c++ */ BOOL WINAPI AddClipboardFormatListener( _In_ HWND hwnd );
参数有且只有一个,就是窗口的句柄,你想让哪个窗口监控剪贴板,你就把这个窗口的句柄传进去。
下面是DllImport
// C# [DllImport("User32.dll")] public extern static bool AddClipboardFormatListener(IntPtr hwnd);
然后,在Form的构造函数中调用。
public Form1() { InitializeComponent(); AddClipboardFormatListener(this.Handle); }
接着,如何写消息处理过程呢?重写WndProc方法。
protected override void WndProc(ref Message m) { if (m.Msg == WM_CLIPBOARDUPDATE) { if (Clipboard.ContainsText()) { string strdata = Clipboard.GetText(); if (strdata.StartsWith("http://") || strdata.StartsWith("https://")) { this.txtOutput.AppendText(string.Format("在{0}剪贴板发生了变化。\r\n" + "包含URI:{1}" + "\r\n---------------------------------------------\r\n", DateTime.Now.ToString("HH:mm:ss"), strdata)); // 返回0表示已经处理消息 m.Result = new IntPtr(0); } } } else { base.WndProc(ref m); } }