C#监控系统剪贴板内容

1. Windows API
[code=’c#’]
[DllImport(“User32.dll”, CharSet = CharSet.Auto)]
public static extern
IntPtr SetClipboardViewer(IntPtr hWnd);

[DllImport(“User32.dll”, CharSet = CharSet.Auto)]
public static extern
bool ChangeClipboardChain( IntPtr hWndRemove, IntPtr hWndNewNext);
[/code]

2. 注册
要想使程序加入系统剪贴操作的消息队列,要调用RegisterClipboardViewer()。这样,系统会在每次剪贴操作后发消息给程序。如果要停止监控,调用UnregisterClipboardViewer()移除即可。
[code=’c#’]
private void RegisterClipboardViewer()
{
ClipboardViewerNext = SetClipboardViewer(this.Handle);
}

private void UnregisterClipboardViewer()
{
ChangeClipboardChain(this.Handle, ClipboardViewerNext);
}
[/code]

3. 事件处理
[code=’c#’]
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;
}
}
}
[/code]

发表评论