Qt实战之开发软件数据获取助手

前段时间,受朋友委托,需要做一个能够获取别人软件文本框中内容的助手。当然这需要调用win api来解决问题。一开始,我想都没想,就用getWindowText()。。。。居然没用,好郁闷。于是查msdn。。发现关于返回值,是这样写的

Return Values

The length, in characters, of the copied string, not including the terminating null character, indicates success. Zero indicates that the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid. To get extended error information, call GetLastError.

This function cannot retrieve the text of an edit control in another application.

原来是不能跨线程获取数据。。。。。。好吧。。那没办法。接着用SendMessage发送WM_GETTEXT。。。测试记事本是完全没有问题的。。。但是对那个软件却不起作用。。。。。于是各种百度。。无果。。好吧。。暂时搁一搁。。后来,同学在用vb弄文本框时发现了EM_GETLINECOUNT和  EM_GETLINE  。至此,这个问题算是解决了。

啰嗦了那么多,进入主题吧。接下来,我们先实现这个助手。spy++这个大同小异。无非就是多了几个api的调用和线程处理问题。好了。先看下这个助手的最终效果图。。

Qt实战之开发软件数据获取助手 Qt实战之开发软件数据获取助手

Qt实战之开发软件数据获取助手

按住那个放大镜后  鼠标的样式会自动改变  然后获取鼠标所在位置的窗口句柄。。选择模式 尝试获取数据。  如果有填写发送数据的目的地信息。。还可以直接发送数据。

好了。我们来重点说说以下几点 :

1) 获取窗口句柄      所用API函数为:  HWNDWindowFromPoint( POINTPoint);  只有获取句柄后我们才能调用SendMessage来获取信息

2)Qt修改鼠标样式  首先,要修改鼠标样式,我们就应该对存放图片的便签进行事件处理 鼠标按下,切换切换label背景图片。同时修改鼠标样式。。代码如下

其中lab_MouseStyle就是软件截图中,存放放大镜的label。。。

同时,当用户松开鼠标时。我们需要还原鼠标样式,并且切换label背景.   这个时候,就要对整个程序进行事件拦截了。而不是对label处理事件了。具体代码如下

计时器的做用时通知绘图  绘制窗口的黑色边框。。具体的可以看源码部分。。(绘图部分参考于网络,并非原创。。太久不用gdi了。。有点生疏哈)

   3) 通过句柄获取数据   这里只是谈谈消息的使用   同时有个新问题。怎么处理字符编码问题。。 代码如下(  部分 )

利用WideCharToMultiByte函数再结合QString::fromAscii我们可以很轻松的转换编码。。。 那么问题来了QString又该怎么便捷的转换为TCHAR呢 

这个主要是针对文本框的处理!思路很简单: 先获取文本框中的行数,然后循环获取每一行数据。。不过此代码中没有采用动态开辟数组。。这个如有需要,自行修改。

  4)到此基本的就实现了。我们讲讲题外话。。怎么实现开机启动的功能。   代码如下

来源:Aleks_

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年6月24日
下一篇 2015年6月24日

相关推荐