C#监控系统剪贴板内容
1. Windows API
public static extern IntPtr SetClipboardViewer(IntPtr hWnd);
public static extern bool ChangeClipboardChain( IntPtr hWndRemove, IntPtr hWndNewNext);
2. 注册 要想使程序加入系统剪贴操作的消息队列,要调用RegisterClipboardViewer()。这样,系统会在每次剪贴操作后发消息给程序。如果要停止监控,调用UnregisterClipboardViewer()移除即可。
private void RegisterClipboardViewer() { ClipboardViewerNext = SetClipboardViewer(this.Handle); }
private void UnregisterClipboardViewer() { ChangeClipboardChain(this.Handle, ClipboardViewerNext); }
3. 事件处理
protected override void WndProc(ref Message m) { switch ((int)m.Msg) { case 0x308: //WM_DRAWCLIPBOARD { IDataObject data = Clipboard.GetDataObject(); // 这里的content就是这次剪贴操作,系统剪贴板里的内容的string形式。 // 取得这个内容之后就可以写处理函数。 string content = (String)data.GetData(DataFormats.Text); break; } default: { base.WndProc(ref m); break; } } }