C# WPF MVVM QQ密码管家项目(7,对QQ登录界面的自动输入思路分析)

2021-07-16 15:18

阅读:628

7 - 对QQ登录界面的自动输入思路分析

在开始写代码之前我们得好好研究一下QQ的登录界面。本项目中操作的QQ版本号为:8.9.5(22062)

自动输入在c#开发上方法有二:1是获取输入框控件句柄然后进行赋值;2是对输入框控件进行模拟键盘输入,好比我们手打q号密码变成程序自动帮我们打一样。

那么我们怎么获取QQ的输入框句柄呢?需要用到一个工具:spy++,运行spy++如下图:

技术分享图片

关于spy++软件的获取办法我想不必多说了吧,搜索引擎搜一下spy就能下载到了。

在spy++这软件上我们需要用到的功能只有两个,我在截图上已经标注了,AB两个地方,在B区域右键可以刷新当前桌面的所有程序窗口(本篇暂不需要,提前说明),至于A我们现在开始使用。

技术分享图片

单击A打开“窗口搜索”窗口,鼠标左键按住技术分享图片图标,移动鼠标到需要获取句柄的控件上就能在搜索窗口上显示相应的属性信息。

细心的同学应该能发现,在wpf程序上的输入框、按钮等控件无法获取到句柄,而在winform上的程序却能。同样是c#的东西这是为什么呢?借用知乎上的一个回答:winform程序是对传统windows界面元素的封装,通过gdi绘制。wpf程序是全新的dx渲染绘制的界面,也脱离了对传统windows控件的依赖

简单的说呢就是wpf的控件并非控件,而是画上去与窗体结为一体的东西;winform的控件是独立于窗体的。(个人理解

我们回到正题,研究QQ登录界面干嘛要说这些?先等等,你有没有想过,qq登录界面是用哪种技术实现的ui呢?我们别急回答,直接用spy++去试试就知道了!

技术分享图片

显而易见 

答案是:qq登录界面也是“控件”窗体绘制为一体的。

qq登录界面的“控件”无法获取到句柄,看来现在自动输入上方法1是不能用了,所以我们只能使用方法2了。

那么问题来了,用方法2(模拟键盘输入)需要满足什么条件?答:输入焦点。

我们需要将输入焦点定位在qq号码/密码输入框中,怎么定位?鼠标,单击一下输入框,OK

这时候我们需要用到“模拟鼠标操作”的相关技术,让程序将鼠标指针移动到qq号码输入框内,然后点击一下输入框。问题来了,且不谈模拟鼠标操作,我们怎么知道输入框的坐标呢?没有坐标就不能模拟鼠标去点击输入框的位置了啊。别急,编程是无所不能的。首先,我们需要获取到qq登录窗口的几个信息:1窗口句柄,2坐标,3窗口大小。然后就能对输入框的位置进行计算啦,是不是很简单呀。

综上分析,QQ登录界面的自动输入步骤应如下:

1,获取登录窗口句柄;

2,获得窗口大小;

3,获得窗口坐标;

4,计算两个输入框的位置;

5,模拟鼠标选中输入框获得输入焦点;

6,模拟键盘输入,将qq号、密码输入。

OK,本篇博客到此进入尾声,下一篇,将是项目的结束篇,将思路分析变成代码,学习如何使用“模拟鼠标操作”、获取窗口句柄、模拟键盘输入!


评论


亲,登录后才可以留言!