跟我一起玩Win32开发(25):监视剪贴板

自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉。于是,老邪就拿出《九阴真经》认真阅读,同时用迅雷下载经典大剧《汉武大帝》晚上睡觉前看上几集,老邪一向是善于向古圣先贤学习。

大家知道,迅雷有一个监视剪贴板的功能,如果发现你复制剪贴板的内容包含符合迅雷下载地址格式的就弹出新建下载任务窗口。

可能我们也希望在自己的应用程序中也加入这样XX的功能,其实不难,真的,我用老顽童的人格保证,实现该功能是灰常简单的。

我们需要完成两步就行了。

1、调用AddClipboardFormatListener函数,指定哪个窗口有资格去捕捉剪贴板内容更新的消息。

2、处理WM_CLIPBOARDUPDATE消息,当剪贴板的内容发生变化后,消息处理程序会收到这条消息通知。

我相信,你一定想到了实现思路了。呵呵,我一向对于大家的领悟能力是很有信心的,所以,有时候我故意不说那么明白。其实我们学编程,不能什么问题都指望别人帮忙解决,依靠自己去解决问题才是上尚之道。

今天老邪不用C++来做这个例子,用什么?VB,呵呵,其实也可以,只是许多自负的人看不起VB,很可悲;Delphi?还是不要,不然老顽童会骂人。还是用C#,一来它的语法符合C风格,二来它也可以调用Win32 API。

估计有人会纳闷了,写Win32程序不是要用C++吗?干吗用C#?呵呵,很简单,因为我是老邪,本来俺练的盖世武功就是“旁门左道”,更何况,这年头,人是以非主流为无上光荣的。今天老邪也想“光荣”一回,免得蓉儿说我老了,功夫不行了。

而且,我咨询过相关律师,法律上并没有规定写Win32程序一定要用C++,再说,WinForm本质上也是Win32,而且人家WinForm还可以做Win64呢。

正因为今天的任务很简单,所以我忍不住拿出了看家本领——吹牛,是啊,吹牛好啊,人生难得几回吹。

在处理WM_CLIPBOARDUPDATE消息之前,一定要先调用AddClipboardFormatListener函数,它的原型如下:

[cpp]  view plain  copy
  1. /*  c++  */
  2. BOOL WINAPI AddClipboardFormatListener(
  3. _In_  HWND hwnd
  4. );

参数有且只有一个,就是窗口的句柄,你想让哪个窗口监控剪贴板,你就把这个窗口的句柄传进去。

下面是DllImport

[csharp]  view plain  copy
  1. // C#
  2. [DllImport("User32.dll")]
  3. public extern static bool AddClipboardFormatListener(IntPtr hwnd);

然后,在Form的构造函数中调用。

[csharp]  view plain  copy
  1. public Form1()
  2. {
  3. InitializeComponent();
  4. AddClipboardFormatListener(this.Handle);
  5. }

接着,如何写消息处理过程呢?重写WndProc方法。

[csharp]  view plain  copy
  1. protected override void WndProc(ref Message m)
  2. {
  3. if (m.Msg == WM_CLIPBOARDUPDATE)
  4. {
  5. if (Clipboard.ContainsText())
  6. {
  7. string strdata = Clipboard.GetText();
  8. if (strdata.StartsWith("http://") || strdata.StartsWith("https://"))
  9. {
  10. this.txtOutput.AppendText(string.Format("在{0}剪贴板发生了变化。\r\n" +
  11. "包含URI:{1}" +
  12. "\r\n---------------------------------------------\r\n",
  13. DateTime.Now.ToString("HH:mm:ss"),
  14. strdata));
  15. // 返回0表示已经处理消息
  16. m.Result = new IntPtr(0);
  17. }
  18. }
  19. }
  20. else
  21. {
  22. base.WndProc(ref m);
  23. }
  24. }

最后,可以测试,随便复制一些URI到剪贴板。如下图所示。

好了,大功告成,继续下电影去,拜拜。

posted @ 2018-03-31 14:01 史D芬周 阅读( ...) 评论( ...) 编辑 收藏

跟我一起玩Win32开发(25):监视剪贴板相关推荐

  1. 跟我一起玩Win32开发

    跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...

  2. 跟我一起玩Win32开发(5):具有单选标记的菜单

    跟我一起玩Win32开发(5):具有单选标记的菜单 帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现下图中的这种菜单效果. 就是一种类似单选按钮的菜单,多个菜单项中, ...

  3. 跟我一起玩Win32开发(4):创建菜单

    跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...

  4. 跟我一起玩Win32开发(2):完整的开发流程

    http://blog.csdn.net/tcjiaan/article/details/8497535 目录(?)[-] 一WinMain入口点 二设计与注册窗口类 三创建和显示窗口 四更新窗口可选 ...

  5. 跟我一起玩Win32开发(1):关于C++的几个要点

    http://blog.csdn.net/tcjiaan/article/details/8493072 目录(?)[-] 一指针真的那么恐怖吗 二取地址符号 三参数的传递方式 四指针与对象 我不知道 ...

  6. 跟我一起玩Win32开发(6):创建右键菜单

    快捷菜单,说得容易理解一点,就是右键菜单,当我们在某个区域内单击鼠标右键,会弹出一些菜单项.这种类型的菜单,是随处可见的,我们在桌面上右击一下,也会弹出一个菜单. 右键菜单的好处就是方便,它经常和我们 ...

  7. 跟我一起玩Win32开发(20):浏览文件夹

    最近忙于一些相当无聊的事情,还没忙完,不过,博客还是要写的,不然我头顶上会多了几块砖头. 在上一篇博文中,我们浏览了文件,今天我们也浏览一下目录,如何? 浏览目录我们同样有两个规矩,用托管类库的我就不 ...

  8. GCC for Win32开发环境介绍

    GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...

  9. 7-11 玩转二叉树 (25 分)

    7-11 玩转二叉树 (25 分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的 ...

最新文章

  1. SQL Server-聚焦INNER JOIN AND IN性能分析(十四)
  2. LDA基本介绍以及LDA源码分析(BLEI)
  3. 桌面显示菜单图标下面的字搞起阴影了,怎么弄掉?
  4. (网络编程)InetAddress(表示ip地址的类)相关使用
  5. 第43课 最大公约数 《小学生C++趣味编程》
  6. Flutter TextButton 详细使用配置、Flutter ButtonStyle样式概述实践
  7. JAVA并发编程的挑战
  8. [补档]noip2019集训测试赛(十五)
  9. 使用cv::findFundamentalMat要注意的几点
  10. 【干货】怎样用深度学习做语音识别
  11. docker-compose 学习:部署 ThinkPHP 5 网站
  12. 在vue2.0下安装axios
  13. 如何准确的定级_等保三级与等保二级
  14. 北京将广纳贤才 建设国际人才社区
  15. 几何分布的期望和方差公式推导_平方差公式证明推导过程及运用详解(数学简便计算方法之一)...
  16. 判断串口通信是否正常c语言,串口通信测试方法
  17. 进军互联网该如何选择html模板?
  18. 晶体管与场效应管的区别
  19. 比较:strcmp(),strncmp(),strcasecmp(),strncasecmp()
  20. 2048左移JAVA代码实现,200 行代码实现 2048 游戏

热门文章

  1. 《系统架构设计师教程》 第二章:计算机与网络基础知识
  2. android横竖屏切换总结
  3. java读取csv文件的行数_JMeter 读取 CSV 文件数据行数
  4. Android-彻底解决启动白屏、跳转页面白屏!
  5. ehcache 异常net.sf.ehcache.CacheException: When configured copyOnRead or copyOnWrite, a Store will onl
  6. SAP-PP-生产订单审批(RELEASE)后如何撤销再次审批
  7. Adobe photoshop cs6使用技巧之截取文字
  8. precision_at_k
  9. c语言printf结构体,小白来学C语言之结构体
  10. Eclipse 的 Debug 介绍与技巧