关于VC实现窗口信息自动填充!

实现对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”创建,功能是编辑文本。最常见的是单行文本框。 
  
    窗口风格ES_LEFT、ES_RIGHT或ES_CENTER分别可以将文本设置为左对齐、置右对齐或者居中。
    默认编辑框控件为单行,使用ES_MULTILINE窗口风格可创建多行编辑框。多行编辑框文本缺省情况下自动换行,一旦设置了ES_AUTOHSCROLL风格,则必须按下Enter键换行。
    如果希望编辑框选中的文本失去输入焦点后依然被加亮,设置ES_NOHIDESEL风格可以实现这一点。
    编辑框控件状态改变后,同样给父窗口过程发送WM_COMMAND消息,参数含义和按钮控件基本相同。下表是编辑框控件发送通知消息包含的通知码:
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);    //选中部分编辑框文本

    列表框是字符串的集合。列表框可以单选或多选。以“list”窗口类创建的列表框控件缺省不向父窗口发送WM_COMMAND消息,必须包含LBS_NOTIFY窗口风格才行。如果希望对列表项排序,则应包含LBS_SORT窗口风格。缺省情况下列表框是单项选择的,如果希望多选,则应包含LBS_MULTIPLESEL风格。
    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);    //返回选中列表项索引


你可能感兴趣的:(学习记录,vc++,FindWindow,FindWindowEx,控件)