實作對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); //傳回選中清單項索引