过QQ滑动认证

  • 内容
  • 评论
  • 相关

在一个项目中遇到需要自动登录到游戏的情况。
采用qq账号登录到游戏,需要全自动完成。

遇到的问题:
1、采用BHO登录
游戏程序是一个MFC基于对话框的程序,添加了一个WebBrowser控件,但后面这个WebBrowser无法启动BHO。
2、采用钩子消息吧IE控件抓取出来(成功)

下面说下具体的做法:
首先获取到IE控件 里面的HTMLDocumentClass 那么通过对HTML文档的分析就可以做包括QQ号输入和密码输入的模拟

这边比较简单,这里不多说明:

接下来是计算拖动的位置:
1、获取到底图
2、获取滑块的当前位置
3、计算目标位置
4、计算拖动的偏移量
如下:

public static int GetArgb(Bitmap backImage, Bitmap backFullImage, bool isDebug=false)
        {
            //由于阴影图片四个角存在黑点(矩形1*1) 
            for (int i = 0; i < backFullImage.Width; i++)
            {

                for (int j = 0; j < backFullImage.Height; j++)
                {
                    if ((i >= 0 && i <= 1) && ((j >= 0 && j <= 1) || (j >= (backFullImage.Height - 2) && j <= (backFullImage.Height - 1))))
                    {
                        continue;
                    }
                    if ((i >= (backFullImage.Width - 2) && i <= (backFullImage.Width - 1)) && ((j >= 0 && j <= 1) || (j >= (backFullImage.Height - 2) && j <= (backFullImage.Height - 1))))
                    {
                        continue;
                    }

                    //获取该点的像素的RGB的颜色
                    Color oldColor = backImage.GetPixel(i, j);
                    Color newColor = backFullImage.GetPixel(i, j);
                    if (Math.Abs(oldColor.R - newColor.R) > 70 || Math.Abs(oldColor.G - newColor.G) > 70 || Math.Abs(oldColor.B - newColor.B) > 70)
                    { 
                        return i;
                    } 
                }
            }
            return 0;
        }

效果:

如何将Img 标签的图片直接保存到图片:

private Bitmap SaveHTMLElementToBitmap(IHTMLElement element, HTMLDocumentClass parentDocument)
        {
            if (parentDocument == null || element == null) return null;
            try
            {
                IHTMLControlRange rang = (IHTMLControlRange)((HTMLBody)parentDocument.body).createControlRange();
                
                rang.add((IHTMLControlElement)element);
                rang.execCommand("Copy", false, null);
                Image image = Clipboard.GetImage();
                return new Bitmap(image);
            }
            catch (Exception ex)
            {
                LogHelper.LogError("Save the HTMLElement to Bitmap fault.", ex);
                return null;
            }
        }

整体效果:

评论

0条评论

发表评论

电子邮件地址不会被公开。