用VC++製作QQ自動登陸軟體[
近日由於在華為培訓,期間因為導師們忙得要緊,沒那麼多時間去教導我們,只是給我們看文檔和代碼,看完了,沒事就想出這個來玩玩了。這裡要先用SPY++來找到QQ登陸框的各個視窗標題或ID號。
原理:其實不難,只要找到QQ登陸框的號碼輸入和密碼輸入框,然後向其填資料就是了。
這裡填資料就是向其發送訊息,類比鍵盤 罷了。
一、先是查看QQ登陸框是否開啟,否則開啟它。
//找QQ的登陸對話方塊,如果QQ沒有啟動,則先啟動它。 pWnd = FindWindow(_T("#32770"), _T("QQ使用者登入")); if (!pWnd) { PROCESS_INFORMATION lpProcessInformation; STARTUPINFO startupinfo; memset(&startupinfo,0,sizeof(STARTUPINFO)); memset(&lpProcessInformation,0,sizeof(PROCESS_INFORMATION)); startupinfo.cb = sizeof(STARTUPINFO); startupinfo.dwFlags = STARTF_FORCEOFFFEEDBACK; startupinfo.dwX = 0; startupinfo.dwY = 0; startupinfo.lpDesktop = NULL; startupinfo.lpReserved = NULL; startupinfo.lpReserved2 = NULL; startupinfo.lpTitle = NULL; CreateProcess(_T("D://Tencent//qq//CoralQQ.exe"), NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupinfo, &lpProcessInformation); } |
二、開啟和開啟後就是取得QQ的號碼框和密碼框的控制代碼了
這裡要注意的是,因為QQ密碼框是登陸框的子視窗,先要找到登陸框後再一步步找到QQ的密碼框。找到後就是向它們發送訊息了。QQ的密碼框先複製到剪下板後發送WM_PASTE就可以了,但是密碼框因為使用了QQ鍵盤加密保護技術,所以不能發送WM_PASTE,而要類比鍵盤發送WM_CHAR訊息,讓其一個一個接收密碼就可以了。
if (pWnd) { //獲得QQ的號碼輸入框指標 CComboBox *pCob = (CComboBox *)pWnd->GetDlgItem(138); if (pCob) { m_edtCode.SetSel(0, -1); m_edtCode.Copy(); //先刪除原有號碼後向號碼輸入框發送複製訊息 pCob->SetCurSel(0); pCob->DeleteString(0); pCob->SendMessage(WM_PASTE, 0, 0); } //因為QQ的密碼框是包含在主視窗裡的子視窗,所以先獲得子視窗後再一個個往後找 CWnd *pCwnd = pWnd->GetNextWindow(GW_CHILD); pCwnd = pCwnd->GetNextWindow(GW_HWNDNEXT); while (pCwnd != NULL) { if (pCwnd)//找到 { CEdit *pPwd = (CEdit *)pCwnd->GetDlgItem(16038); if (pPwd) { char cKey; char buf[20]; memset(buf, 0, sizeof(buf)); //因為我的程式是unicode,所以這裡要轉換。如果不是,則不用轉換了。 int iRet = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, m_strPassword.GetBuffer(m_strPassword.GetLength()), m_strPassword.GetLength(), buf, 20, NULL, NULL); //清除密碼框 pPwd->SetSel(0, -1); pPwd->Clear(); i = 0; //將密碼一個個地發送過去。這裡不能用複製訊息,因為QQ的密碼框不允許複製 while (i < iRet) { strncpy(&cKey, buf+i, 1); pPwd->SendMessage(WM_CHAR, (WPARAM)cKey, 0); i++; } break; } } pCwnd = pCwnd->GetNextWindow(GW_HWNDNEXT); } |
三、當填充好號碼和密碼後就可以發送單擊滑鼠訊息,讓QQ登陸了。
//以下為找到登陸按鈕後,發送按一下滑鼠訊息 CButton *pbtnLogin = (CButton *)pWnd->GetDlgItem(16032); if (pbtnLogin) { pbtnLogin->PostMessage(WM_LBUTTONDOWN, 0, 0); pbtnLogin->PostMessage(WM_LBUTTONUP, 0, 0); } |
四、要讓QQ自動登陸,只要加個WM_TIMER就可以了,至於這個大家都會的了,這裡不再講述。
五、結束語:
這裡使用到的技術就是向別的進程發送(資料)訊息,主要就是要找到對方進程接收訊息的控制代碼(這裡用了SPY++),找到後就可以向其它發送(資料)訊息了。比如我前幾天幫別人裝了個PP,但是PP有個瀏覽器,只要你開PP這個東東就會出來,我覺得非常礙眼,就可以給它 發送一個WM_HIDE訊息。其它的大家可以隨意發揮了!