C#实现的Windows剪贴板监视器功能实例【附demo源码下载】
本文实例讲述了c#实现的windows剪贴板监视器功能。分享给大家供大家参考,具体如下:
windows剪贴板
剪贴板(clipboard)是内存中的一块区域,是windows内置的一个非常有用的工具,通过小小的剪贴板,架起了一座彩桥,使得在各种应用程序之间,传递和共享信息成为可能。然而美中不足的是,剪贴板只能保留一份数据,每当新的数据传入,旧的便会被覆盖。
相关windows api
最主要的是setclipboardviewer,每当剪贴板的内容发生变化时,该函数通过wm_drawclipboard消息将窗口加入被通知的窗口链。
由于剪贴板观察器链中下一个窗口的句柄还没有返回,应用程序不应传递它在setclipboardviewer
调用过程中接收到的wm_drawclipboard消息。
如果要从剪贴板观察器链中去掉窗口链,则应用程序必须调用changeclipboard成员函数。
#region definitions //constants for api calls... private const int wm_drawclipboard = 0x308; private const int wm_changecbchain = 0x30d; //handle for next clipboard viewer... private intptr mnextclipboardviewerhwnd; //api declarations... [dllimport("user32.dll", charset = charset.auto)] static public extern intptr setclipboardviewer(intptr hwndnewviewer); [dllimport("user32.dll", charset = charset.auto)] static public extern bool changeclipboardchain(intptr hwnd, intptr hwndnext); [dllimport("user32.dll", charset = charset.auto)] public static extern int sendmessage(intptr hwnd, int msg, int wparam, int lparam); #endregion
wndproc函数
操作系统向应用程序发送一系列消息,如左键按下和左键抬起,应用程序将通过getmessage等方法最终将消息提交到窗口过程(wndproc[英文全称windows process])指向一个应用程序定义的窗口过程的指针。
我们需要重写该函数来处理剪贴板内容改变事件:
#region message process //override wndproc to get messages... protected override void wndproc(ref message m) { switch (m.msg) { case wm_drawclipboard: { //the clipboard has changed... //########################################################################## // process clipboard here :)........................ //########################################################################## sendmessage(mnextclipboardviewerhwnd, m.msg, m.wparam.toint32(), m.lparam.toint32()); //显示剪贴板中的文本信息 if (clipboard.containstext()) { label1.text = clipboard.gettext(); } //显示剪贴板中的图片信息 if (clipboard.containsimage()) { picturebox1.image = clipboard.getimage(); picturebox1.update(); } break; } case wm_changecbchain: { //another clipboard viewer has removed itself... if (m.wparam == (intptr)mnextclipboardviewerhwnd) { mnextclipboardviewerhwnd = m.lparam; } else { sendmessage(mnextclipboardviewerhwnd, m.msg, m.wparam.toint32(), m.lparam.toint32()); } break; } } base.wndproc(ref m); } #endregion
效果图:
完整实例代码点击此处本站下载。
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#字符串操作技巧总结》、《c#数组操作技巧总结》、《c#中xml文件操作技巧汇总》、《c#常见控件用法教程》、《c#程序设计之线程使用技巧总结》、《c#操作excel技巧总结》、《winform控件用法总结》、《c#数据结构与算法教程》及《c#面向对象程序设计入门教程》
希望本文所述对大家c#程序设计有所帮助。
推荐阅读
-
C#实现的Windows剪贴板监视器功能实例【附demo源码下载】
-
C#实现导出List数据到xml文件的方法【附demo源码下载】
-
Android开发实现的简单计算器功能【附完整demo源码下载】
-
C# 实现简易的串口监视上位机功能附源码下载
-
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
-
Android编程实现的微信支付功能详解【附Demo源码下载】
-
Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】
-
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)_php实例
-
Zend Framework实现留言本分页功能(附demo源码下载)_php实例
-
Zend Framework实现具有基本功能的留言本(附demo源码下载)_php实例