Windows编程中的剪贴板机制

C/C++ 专栏收录该内容
194 篇文章 0 订阅

记得以前在xp+vc6.0下写过一个简单的利用剪贴板机制向其他程序窗口中发送文本的小程序。最近在forum上看到一个朋友提问,如何实现向QQ2009的窗口上发送文本这一功能。然后我就试着按照以前的那个思路写了一段代码,如下:

 

 

编译运行之后,发现可以找到“QQ2009”的窗口,也可以向它发送消息,比如,在得到QQ2009的窗口的句柄之后用::SendMessage(hWnd,WM_CLOSE,0,0);就可以将QQ2009的窗口关闭。但是,当我用Spy++来抓取它的相关信息的时候,Spy++会提示:Cannot find window which matches search criteria.就是找不到符合标准的窗口。所以也就无法显示QQ2009窗体中更详细的信息,我想腾讯可能是为了安全性,对一些访问进行了限制。不过我认为还是可以通过其他途径获取信息,毕竟它是一个software。也许可以用OllyDbg来分析获取它的一些信息,maybe网上也可以找到一些QQ未公开的信息呢。

 

但是目前是束手无策了。可是抱着试一试的态度,假设QQ2009中存在类名为Edit的编辑框,用FindWindow试一下。通过上面的代码,确实find到了Edit,有点儿惊喜。下来就要看看它是哪一个编辑框呢,我用SendMessage向它发送个消息,看它是否响应不。方法就是我将剪切板中的文本信息(CF_TEXT类型)send给这个编辑框,让它显示出来。

 

但是结果并非如此,执行之后,QQ2009窗口中的所有编辑框并没有显示剪贴板中的字符串。我也不知道使用的是什么方法拦截了我的消息,可能是QQ又有什么安全措施吧。(如果有朋友知道,请告诉鄙人一下)

 

到此为止,想向QQ2009窗口中发送文本这一实验失败了。但是上面那部分代码还是可以实现向一个普通窗口中发送文本的功能的。 

 



原理总结:

 

本功能其实就是运用了Windows的剪贴板机制来实现不同应用程序之间传送信息的功能。

Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制。Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局共享内存,用来暂存在各进程间进行交换的数据:提供数据的进程创建一个全局内存块,并将要传送的数据移到或复制到该内存块;接受数据的进程(也可以是提供数据的进程本身)获取此内存块的句柄,并完成对该内存块数据的读取。


关于Windows剪贴板机制的简单介绍如下:

  


  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

delphiwcdj

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值