WIN7下使用.net(C#)监视剪贴板 (转)

最近需要做一个小程序,需要常驻后台,监视剪贴板变化并提取内容, 在网上查了一些资料,先采用SetClipboardViewer方法实现,具体原理可以参考http://www.cnblogs.com/jht/archive/2006/03/20/354088.html,我的程序中使用的是http://code.google.com/p/clipboardviewer/提供的ClipboardChangeNotifier.cs类,比较方便,类代码见附件(在google code中下载或http://www.kuaipan.com.cn/file/id_22823997376823393.htm),使用方法为: 主窗体初始化时:

[csharp] view plaincopyprint?

  1. ClipboardChangeNotifier clipChange = new ClipboardChangeNotifier();
  2. clipChange.ClipboardChanged += new EventHandler(clipChange_ClipboardChanged);
  3. clipChange.AssignHandle(this.Handle);
  4. clipChange.Install();
    ClipboardChangeNotifier clipChange = new ClipboardChangeNotifier();
    clipChange.ClipboardChanged += new EventHandler(clipChange_ClipboardChanged);
    clipChange.AssignHandle(this.Handle);
    clipChange.Install();

主窗体退出时:

[csharp] view plaincopyprint?

  1. clipChange.Uninstall();
    clipChange.Uninstall();

此程序在XP下运行正常,但是后来在WIN7下使用时遇到了一些问题,经常会在屏幕保护程序或系统休眠后,不再实时监视剪贴板,具体原因不明,后来查了下资料,有人提到SetClipboardViewer函数在Vista以上版本工作并不是很稳定,建议使用AddClipboardFormatListener这个新的API函数,MSDN(http://msdn.microsoft.com/en-us/library/windows/desktop/ms649033%28v=vs.85%29.aspx)上提到该API函数只能用于Vista及以上版本,经测试,程序工作正常
代码比SetClipboardViewer方法简单: 首先声明API函数

[csharp] view plaincopyprint?

  1. [DllImport("user32.dll")]
  2. public static extern bool AddClipboardFormatListener(IntPtr hwnd);
  3. [DllImport("user32.dll")]
  4. public static extern bool RemoveClipboardFormatListener(IntPtr hwnd);
  5. private static int WM_CLIPBOARDUPDATE = 0x031D;
    [DllImport("user32.dll")]
        public static extern bool AddClipboardFormatListener(IntPtr hwnd);

        [DllImport("user32.dll")]
        public static extern bool RemoveClipboardFormatListener(IntPtr hwnd);

        private static int WM_CLIPBOARDUPDATE = 0x031D;

窗体初始化时添加对剪贴板的监视:

[csharp] view plaincopyprint?

  1. AddClipboardFormatListener(this.Handle);
 AddClipboardFormatListener(this.Handle);

窗体关闭时移除对剪贴板的监视:

[csharp] view plaincopyprint?

  1. RemoveClipboardFormatListener(this.Handle);
  RemoveClipboardFormatListener(this.Handle);

接收到剪贴板更新的消息时,读取剪贴板内容:

[csharp] view plaincopyprint?

  1. protected override void DefWndProc(ref Message m)
  2. {
  3. if (m.Msg == WM_CLIPBOARDUPDATE)
  4. {
  5. UpdateClipValueList();
  6. }
  7. else
  8. {
  9. base.DefWndProc(ref m);
  10. }
  11. }
时间: 2024-11-14 12:29:10

WIN7下使用.net(C#)监视剪贴板 (转)的相关文章

WIN7 下的 filemon 版本

http://blog.sina.com.cn/s/blog_594398e80100tx1q.html WIN7 下的 filemon 版本 (2011-09-26 22:26:12) 标签: filemon win7 杂谈   Filemon 是一款出色的文件系统监视软件,它可以监视应用程序进行的文件读写操作.它将所有与文件一切相关操作(如读取.修改.出错信息等)全部记录下来以供用户参考,并允许用户对记录的信息进行保存.过滤.查找等处理,这就为用户对系统的维护提供了极大的便利.通过上面的介绍

Win7下连远程桌面 窗口 全屏 切换

今天在win7下用远程桌面,不小心把桌面上面的还原按钮给点到了, 于是整个远程桌面就变成了本地机的一个窗口了,可以看见任务栏的那种 有些人觉得这样方便,可以看见qq消息等,但我想切回全屏时一时找不到按钮,囧 百度了下,有快捷键ctrl+alt+break 貌似在XP下连远程桌面时,只能全屏 其它快捷键也贴出来,不过貌似都用不着 链接:http://wenwen.soso.com/z/q210960589.htm?sp=1176 快捷键 描述 Alt+Page Up 从左向右在程序之间切换. Al

监视剪贴板(转)

监视剪贴板 使用一些下载工具比如FlashGet.DuDu下载器,通常有一个选项叫做监视剪贴板,如果发现指定类型的后缀名,则自动开始下载,监视剪贴板的小技巧很有实用价值.        下面就说说监视剪贴板的小技巧.        Windows系统使用list或者是chain来保存当剪贴板的数据发生变化的时候要求被通知到的一些窗口.  每一次当剪贴板的数据发生变化的时候,这个list的第一个窗口收到一个WM_DRAWCLIPBOARD系统消息, 该窗口可以查询剪贴板数据的相关信息.这个非常简单

win7下的mstsc ubuntu下的rdesktop

远程图形化登录, win7下: 开始->mstsc->10.108.103.93即可进行后续输入账号密码验证登录. 功能类似rdesktop. 如图: win7下的mstsc ubuntu下的rdesktop,码迷,mamicode.com

Win7下超级管理员创建普通权限任务

已转至新的博客 http://www.raysoftware点击打开链接.cn/?p=49 项目中用到一个功能,Win7下超级管理员创建普通权限任务. 试了几种办法,例如获取资源管理器的Token,然后以这个Token用CreateProcessWithTokenW创建任务.这样做是可以的. 但是如果当前没有资源管理器或者其他普通权限的任务怎么办?CreateToken自己构造一个Token也可以,但是那些参数看了就头大. 试了一下以超级用户方式启动任务管理器用菜单中的运行,居然是默认创建普通权

Win7下Eclipse中运行远程MapReduce程序

1.hadoop插件的参数配置 2.运行时的参数 3.运行结果 Win7下Eclipse中运行远程MapReduce程序,布布扣,bubuko.com

在win7 下编译MySQL源码

MySQL MySQL是一款优秀的开源数据库,在阿里.网易等各个互联网公司中有着广泛的应用.尽管各种NoSQL大行其道,但是关系型数据库依然必不可少. 作为一个新手,在Win7下用源码安装MySql数据库并不容易.我自己都折腾了好几天.今天把安装过程记录下来,其一是为了方便自己以后学习,其二则是分享过程,让学习者能够从我这篇文章中受益. 1. 编译环境及源码下载 编译环境:Visual Studio 2010 (Win7 32位) 编译工具: bison-2.4.1-setup.exe 下载地址

WIN7下使用VC2010调试uCOS-II 2.91

WIN7下使用VC2010调试uCOS-II 2.91 http://www.amobbs.com/thread-5462878-1-1.html ucos系统学习汇总 http://www.cnblogs.com/gmh915/category/212499.html WIN7下使用VC2010调试uCOS-II 2.91,码迷,mamicode.com

win7下安装docker的坑

1.win7使用toolbox安装docker,下载地址:https://get.daocloud.io/toolbox/ 2.安装toolbox,启动Oracle VM VirtualBox报错处理 Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works. PSDispatch looks fine. Weird. 解决办法: 修改注册表HKEY_CLASSES_