天天看點

關于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//這個是設定文本消息,該例子起填充密碼和賬号的功能
           
<pre name="code" class="cpp">
           
</pre><pre name="code" class="cpp"><span style="font-size:18px;background-color: rgb(0, 153, 0);">3、下面介紹一些編輯框EditBox的消息和用法下面來自網絡</span>           
</pre><pre code_snippet_id="411583" snippet_file_name="blog_20140630_6_8963711" name="code" class="cpp">           

  編輯框是最簡單的預先定義視窗類;在另一方面,它又是最複雜的視窗類。使用類名“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);    //傳回選中清單項索引