|
程序截图:

实现思路,利用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++ 找不到..
程序就不发了。这个内置版,是为我的家人设计的。嘎嘎~~~
|
|