C#实现的Windows剪贴板监视器功能实例【附demo源码下载】_C#教程

本文实例讲述了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#程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索windows
, c#
, 剪贴板
监视器
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-12-23 20:13:29

C#实现的Windows剪贴板监视器功能实例【附demo源码下载】_C#教程的相关文章

Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】_Android

本文实例讲述了Android实现软件列表的点击启动另外一个程序功能.分享给大家供大家参考,具体如下: 目前面世的许多软件中有这么一个功能:设备中安装了哪些软件,他们会以一个软件列表清单的形式向用户展示出来. 今天我们就来实现这一功能: 运行环境: motorola defy+ 系统2.3.6 主要 API : PackageInfo,PackageManager,LayoutInflater,ApplicationInfo PackageManger类,它的主要职责是管理应用程序包. 通过它,我

Android编程实现TextView垂直自动滚动功能【附demo源码下载】

本文实例讲述了Android编程实现TextView垂直自动滚动功能.分享给大家供大家参考,具体如下: 在做android 应用的开发的时候,横向滚动或者要做出跑马灯的效果很简单,textview本身的属性就支持,只要设置准确就会滚动,开发起来比较简单,但是textview 不支持垂直滚动,那么垂直滚动就需要自己来实现了,很多网友提供的垂直滚 动方案都是千篇一律,使用ScrollView来进行滚动,但是都不完美,做起来有些别扭.有一位网友给出的歌词的滚动思路明确,能从根本上解决问题,因此我实现的

jquery拖拽效果完整实例(附demo源码下载)_jquery

本文实例讲述了jquery实现的拖拽效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 点击此处查看在线演示效果. 具体代码如下: html部分: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script type="

jQuery动态添加可拖动元素完整实例(附demo源码下载)_jquery

本文实例讲述了jQuery动态添加可拖动元素的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: index.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type&

php+ajax实现带进度条的上传图片功能【附demo源码下载】_php技巧

本文实例讲述了php+ajax实现带进度条的上传图片功能.分享给大家供大家参考,具体如下: 运行效果图如下: 代码如下: <?php if(isset($_FILES["FileInput"]) && $_FILES["FileInput"]["error"]== UPLOAD_ERR_OK) { ############ Edit settings ############## $UploadDirectory = 'F:

WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)_javascript技巧

本文实例讲述了WebGL利用FBO完成立方体贴图效果的方法.分享给大家供大家参考,具体如下: 这篇主要记录WebGL的一些基本要点,顺便也学习下如何使用FBO与环境贴图.先看下效果图(需要支持WebGL,Chrome,火狐,IE11). 主要实现过程如下,先用FBO输出当前环境在立方体纹理中,再画出当前立方体,最后画球,并且把FBO关联的纹理贴在这个球面上. 开始WebGL时,最好有些OpenGL基础,在前面讲Obj完善与MD2时,大家可能已经发现了,因为着色器的添加使用,原来一些Opengl大

JS实现可编辑的后台管理菜单功能【附demo源码下载】_javascript技巧

本文实例讲述了JS实现可编辑的后台管理菜单功能.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

jQuery控制li上下循环滚动插件用法实例(附demo源码下载)_jquery

本文实例讲述了jQuery控制li上下循环滚动插件用法.分享给大家供大家参考,具体如下: /** * * jQuery scrollQ plugin li上下滚动插件 * @name jquery-scrollQ.js * @author Q * @date 2012-03-23 * line 显示li行数 * scrollNum 每次滚动li行数 * scrollTime 滚动速度 单位毫秒 * */ (function($){ var status = false; $.fn.scrollQ

JS密码生成与强度检测完整实例(附demo源码下载)_javascript技巧

本文实例讲述了JS密码生成与强度检测的方法.分享给大家供大家参考,具体如下: 1. 生成强密码 截图如下: 相关代码如下: function getPwd(n) { var s = ''; while(n--) s += String.fromCharCode(33 + Math.floor(Math.random()*(126-33))) document.getElementById('txt1').value = s; } 2. 计算密码破解时间 截图如下: 相关代码如下: functio