QQ登陆功能的实现2

简介:

QQ登陆功能的实现2

    由于看到园子里有朋友说需要讲解和剖析实现的步骤,前面的QQ登陆实现只有代码,所以这篇补上

   1.  分析

1). 当运行QQ.exe后会出现qq登陆界面的窗体
image

2). 我们用spy++分析窗体可以看到窗体有2个子控件,一个是账号输入框,一个密码框
image

3). 再用spy++做事件分析,让spy++挂载hook后点解登陆按钮可以发现,按钮点击的坐标
image

  2.  上面我们详细分析了登陆过程的操作步骤需要的信息,现在来实现

1). 首先运行QQ,使用 Process pro = Process.Start(qqPath);这个方法来运行QQ

2). 然后我们需要找到登陆窗体的句柄,需要EnumDesktopWindows这个API来实现
   函数原型BOOL WINAPI EnumDesktopWindows(

 __in_opt HDESK hDesktop,

 __in WNDENUMPROC lpfn,

 __in LPARAM lParam

    ); 
  大家都知道.net调用API比较烦,那么我们需要一个工具来简化我们的操作,在这里推荐2个工具,pinvoke.net(http://www.pinvoke.net/)和P/Invoke Interop     Assistant(http://clrinterop.codeplex.com/)后者是一个开源项目,个人来说喜欢前者一些,工具很简单一看就会,就不讲解了,接上

     我们需要EnumDesktopWindows来找到登陆窗体,这个api 的声明如下
   public delegate bool EnumDesktopWindowsDelegate(IntPtr hWnd, uint lParam);
   [DllImport("user32.dll", EntryPoint = "EnumDesktopWindows", ExactSpelling = false, CharSet =     CharSet.Auto, SetLastError = true)]

   [return: MarshalAs(UnmanagedType.Bool)] 
   public static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDesktopWindowsDelegate lpEnumCallbackFunction, IntPtr lParam); 
   使用这个API,然后根据pid就可以找到登陆窗口了

3).  找到登陆窗口之后我们需要找到登陆窗口里面的控件,这过程我们需要使用另一个API就是EnumChildWindows,函数原型: 
    BOOL EnumChildWindows( 
      HWND hWndParent, 
      WNDENUMPROC lpEnumFunc, 
      LPARAM lParam); 
   .net API声明
   [DllImport("user32.Dll")] 
  [return: MarshalAs(UnmanagedType.Bool)] 
  public static extern bool EnumChildWindows(IntPtr parentHandle, EnumChildWindowsDelegate callback, IntPtr lParam); 
  public delegate bool EnumChildWindowsDelegate(IntPtr hwnd, IntPtr lParam); 
  找控件方法如下

 public static List<IntPtr> FindControl(IntPtr hwnd, string className, string title = null)
 {
            List<IntPtr> controls = new List<IntPtr>();
            IntPtr handle = IntPtr.Zero;
            while (true)
            {
                IntPtr tmp = handle;
                handle = WinAPIHelper.FindWindowEx(hwnd, tmp, className, title);
                if (handle != IntPtr.Zero)
                {
                    controls.Add(handle);
                }
                else
                    break;
            }
            return controls;
  }

4).  经过上面我们找到2个子控件,现在需要为2个子控件设置值,对于一般的文本框我们可以用SETText消息来实现,对于特殊的输入框,我们只能模拟按键实现

首先设置QQ号码WinAPIHelper.SendMessage(cons[0], WinAPIHelper.WM_SETTEXT, IntPtr.Zero, new StringBuilder(mainQQ)),其中cons[0]为输入框的句柄,这样就输入了QQ号码,输入密码需要以下步骤

A)窗体置顶,b)窗体获取焦点,c)输入控件获取焦点,d)发送按键
WinAPIHelper.BringWindowToTop(hLogonWnd),使用BringWindowToTop这个API来实现置顶,WinAPIHelper.SetForegroundWindow(hLogonWnd)使用SetForegroundWindow这个API来实现获取焦点,WinAPIHelper.SendMessage(cons[0], WinAPIHelper.WM_SETFOCUS, 0x001a0494, 0)使用SETFocus来设置控件焦点,SendKeys.SendWait(mainQQPwd)这个类来实现密码输入模拟

5).  经过上面步骤我们实现信息的输入,现在我们需要点解按钮
通过spy我们的到了按钮的坐标信息,关于点击的实现参照http://www.cnblogs.com/Rolends/archive/2012/04/18/2454964.html

6).  登陆操作过程完成,接下来就等待登陆结果,我们需要使用EnumDesktopWindows不断的来获取窗体进行辨别

word里写还是不行,发出来乱完了

QQ 讨论组广告群发工具(已开发完成)索引

目录
相关文章
|
关系型数据库 MySQL Linux
|
4月前
|
Ubuntu 机器人 定位技术
Loam在Ubuntu 18.04上的一站式安装指南
现在,你已经完成了Loam在Ubuntu 18.04上的一站式安装盛宴。从更新系统清洁,到搭建魔法环境的工作空间,再到召唤和激活Loam精髓的艺术——每步都妙不可言,每步都至关重要,让你在这场技术的饕餮盛宴中大显身手。
125 8
|
机器学习/深度学习 数据采集 前端开发
【机器学习】随机森林:深度解析与应用实践
在机器学习的广阔天地中,集成学习方法因其卓越的预测能力和泛化性能而备受青睐。其中,随机森林(Random Forest)作为集成学习的一个重要分支,凭借其简单、高效且易于实现的特性,在分类和回归任务中展现了非凡的表现。本文将深入探讨随机森林的基本原理、核心构建模块、关键参数调优以及在实际应用中的策略与案例分析,旨在为读者提供一个全面而深入的理解。
1235 3
|
定位技术
uniapp地图标记点的点击事件
uniapp地图标记点的点击事件
436 2
|
JavaScript 测试技术 Go
一个20年技术老兵的2020年度技术总结
一个20年技术老兵的2020年度技术总结
|
安全 前端开发 测试技术
SystemVerilog学习-01-系统验证概述(一)
SystemVerilog学习-01-系统验证概述
499 0
SystemVerilog学习-01-系统验证概述(一)
|
存储 弹性计算 安全
阿里云服务器价格参考:阿里云服务器2023年1月到5月历史价格对比
本文为大家展示了阿里云服务器在2023年1月到5月期间,每个月的云服务器优惠价格情况,以供大家参考和比较,看看阿里云服务器目前的优惠价格与前几个月相比是涨价了还是降低了。
阿里云服务器价格参考:阿里云服务器2023年1月到5月历史价格对比
|
13天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾