实现对QQ游戏的账号和密码的自动填充,一键登陆功能
1、先给出核心代码:
//一键登陆
void CAutoLoadingQQDlg::OnButtonLoading()
{
// TODO: Add your control notification handler code here
CString parentCaption = "QQ游戏";
CString childCaption = "";
HWND hParent,hChildZhangHao,hChildMiMa;
hParent = ::FindWindow(NULL,parentCaption);
if(NULL != hParent)
{
hChildZhangHao = ::FindWindowEx(hParent,NULL,"Edit",childCaption);
if (NULL != hChildZhangHao) //填账号
{
LPARAM lParamZhang = (LPARAM)"111111111";
::SendMessage(hChildZhangHao,WM_LBUTTONDOWN,0,0);
::SendMessage(hChildZhangHao,WM_LBUTTONUP,0,0);
::SendMessage(hChildZhangHao,WM_SETTEXT,0,lParamZhang);
hChildMiMa = ::FindWindowEx(hParent,hChildZhangHao,"Edit",childCaption);
if (NULL != hChildMiMa) //填密码
{
LPARAM lParamMi = (LPARAM)"333333333";
::SendMessage(hChildMiMa,WM_LBUTTONDOWN,0,0);
::SendMessage(hChildMiMa,WM_LBUTTONUP,0,0);
::SendMessage(hChildMiMa,WM_SETTEXT,0,lParamMi);
}
}
else
{
AfxMessageBox("没有找到子窗口");
}
//点击登陆
LPARAM lParam = (LPARAM)0x00f200b2;
::SendMessage(hParent,WM_LBUTTONDOWN,0,lParam);
::SendMessage(hParent,WM_LBUTTONUP,0,lParam);
}
else
{
AfxMessageBox("没有找到父窗口");
}
}
2
、
内容分析,上面主要用了FindWindow和FindWindowEx两个函数看这两个API:
HWND FindWindow( LPCTSTR lpClassName, //窗口类名 LPCTSTR lpWindowName );//窗口名
HWND FindWindowEx( HWNDhwndParent, // 父窗口句柄 ---------->这里如果为NULL默认父窗口为桌面
HWND hwndChildAfter, // 子窗口句柄-------->这里是为了方便查找的,该函数会找该句柄以后的句柄(不包括该句柄),为NULL就从第一个查
LPCTSTR lpszClass, // 要找的类名
LPCTSTR lpszWindow // 要找的窗口名);
我们还用了三个消息:
WM_LBUTTONDOWN//这个是左键按下消息
WM_LBUTTONUP//这个是左键抬起消息
WM_SETTEXT//这个是设置文本消息,该例子起填充密码和账号的功能
3、下面介绍一些编辑框EditBox的消息和用法下面来自网络
编辑框是最简单的预先定义窗口类;在另一方面,它又是最复杂的窗口类。使用类名“edit”创建,功能是编辑文本。最常见的是单行文本框。
EN_SETFOCUS 编辑框已经获得输入焦点
EN_KILLFOCUS 编辑框已经失去输入焦点
EN_CHANGE 编辑框的内容将改变
EN_UPDATE 编辑框的内容已经改变
EN_ERRSPACE 编辑框执行已经超出中间
EN_MAXTEXT 编辑框在插入时执行超出空间
EN_HSCROLL 编辑框的水平滚动条已经被按下
EN_VSCROLL 编辑框的垂直滚动条已经被按下
SetWindowText和GetWindowText函数分别用于设置和返回编辑框文本。
SendMessage(hwndEdit,WM_CUT,0,0); //剪切编辑框文本
SendMessage(hwndEdit,WM_COPY,0,0); //复制编辑框文本
SendMessage(hwndEdit,WM_CLEAR,0,0); //清空编辑框文本
SendMessage(hwndEdit,WM_PASTE,0,0); //将剪贴板文本粘贴到编辑框
SendMessage(hwndEdit,EM_GETSEL,(WPARAM)&iStart,(LPARAM) &iEnd); //返回编辑框 选中文本首尾位置
SendMessage(hwndEdit,EM_SETSEL,iStart,iEnd); //选中部分编辑框文本
SendMessage(hwndList,LB_ADDSTRING 0,(LPARAM)szString); //追加一列表项
SendMessage(hwndList,LB_INSERTSTRING,iIndex,(LPARAM)szString); //插入一列表 项
SendMessage(hwndList,LB_DELETESTRING,iIndex,0); //删除一列表项
SendMessage(hwndList,LB_RESETCONTENT,0,0); //清空列表框内容
SendMessage(hwndList,WM_SETREDRAW,FALSE,0); //禁止重新绘制
SendMessage(hwndList,WM_SETREDRAW,TRUE,0); //允许重新绘制
iCount = SendMessage (hwndList, LB_GETCOUNT,0,0); //返回列表项数量
SendMessage(hwndList,LB_SETCURSEL,iIndex,0); //选中一个列表项
iIndex = SendMessage(hwndList,LB_GETCURSEL,0,0); //返回选中列表项索引