找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3483|回复: 0
打印 上一主题 下一主题
收起左侧

QQ游戏自动登陆器 V1.0 实现原理

[复制链接]
跳转到指定楼层
楼主
ID:71922 发表于 2015-1-11 00:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序截图:


实现思路,利用FindWindow 需找 QQ游戏 窗口获得其窗口句柄 (无论是哪个版本的QQ游戏 窗口标题名都是 QQ游戏)利用这个句柄,使用EnumChildWindows 函数 遍历其文本框。向其写入,第一个文本框一定是账号,然后向其发送一个 SendMessage(hWnd,WM_SETTEXT,MAX_PATH,(long)QQUser); 写入数据的消息,
再判断控件        if (lStyle & ES_PASSWORD)  是否为密码属性 是则发送::SendMessage(hWnd,WM_SETTEXT,MAX_PATH,(long)Password); 密码。 密码框输入完毕后 发送一个回车消息使其登录。PostMessage(hWnd,WM_KEYDOWN,VK_RETURN ,0);

具体实现源码:

先设置几个全局变量:

char QQUser[11] = {0};                        // QQ 账号
char QQPassword[]="L、";              // QQ 密码  偷一下懒  全部统一密码

int Test = 0;                                                        // 如果已经对两个对话框写入数据则回车登陆

//  这个是【账号 1】按钮触发的函数        
void CQQDlg::OnGame1()

{       
        GetDlgItem(IDC_Game1)->EnableWindow(0);    // 设置按钮为禁用  只是为了美观一点

        strcpy(QQUser,"1262563257");
        HWND hWnd = ::FindWindow(NULL,"QQ游戏");    // 寻找窗口句柄
        ::EnumChildWindows(hWnd,(WNDENUMPROC)EnumFunc,NULL);    // 遍历控件
        Test = 0;   
        CloseHandle(hWnd);

        GetDlgItem(IDC_Game1)->EnableWindow(1);            // 设置按钮为可用   只是为了美观一点
}




//  EnumChildWindows 回调函数
BOOL CALLBACK EnumFunc(HWND hWnd,LPARAM lParam)

{
        if (Test > 2)       // 当Test 大于 2 时 说明数据已经写入 结束循环
        {
                return 0;
        }

        LONG lStyle = ::GetWindowLong(hWnd,GWL_STYLE); // 获取文本控件属性

        if (lStyle & ES_PASSWORD)        // 向密码框输入密码
                ::SendMessage(hWnd,WM_SETTEXT,MAX_PATH,(long)Password);

        Test ++ ;
        if ( Test == 1 )        // 第一个编辑框 肯定是账号
                ::SendMessage(hWnd,WM_SETTEXT,MAX_PATH,(long)QQUser);

        if ( Test == 2 )//按回车键
                ::PostMessage(hWnd,WM_KEYDOWN,VK_RETURN ,0);

        return 1;
}

当然,你也可以试着改进,例如,FindWindow 函数寻找窗口失败 则调用 WinExe 函数调用指定目录中的程序

例如这段在 V1.1升级版 中的代码
int RunQQGame()

{
        char Dir[]="C:\0";
        char szDriverName[MAX_PATH] = {0};
        DWORD Y;

        strcpy(Dir, "C:\0");
        for( Dir[0] = 'C'; Dir[0] < 'Z'; Dir[0]++ )
        {
                sprintf(szDriverName,"%s\\Program Files\\腾讯游戏\\QQGAME\\QQGame.exe",Dir); // 一般默认的路径

                GetBinaryType(szDriverName,&Y);    // 获取分区的类型
                if( Y == SCS_32BIT_BINARY )
                {
                        WinExec(szDriverName,SW_SHOW);
                        return 1;
                }
                else
                {
                        sprintf(szDriverName,"%s\\QQ游戏大厅\\QQGame.exe",Dir);    // 为了兼容 网吧游戏
                        GetBinaryType(szDriverName,&Y);
                        if( Y == SCS_32BIT_BINARY )
                        {
                                WinExec(szDriverName,SW_SHOW);
                                return 1;
                        }               
                }
        }        
        return 0;
}

你也可以改进为 外置QQ版 用户的账号密码用独立的文件存储起来,进行加密。

这个程序的缺点就是,无法判断用户已经登录QQ时,再启动QQ游戏,就会有一个快速登录的 界面。我不知道怎么去判断这个界面。也无法取得  【其他账号】的按钮句柄...SPY++ 找不到..

程序就不发了。这个内置版,是为我的家人设计的。嘎嘎~~~

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表