程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 用VC++制作QQ自動登陸軟件

用VC++制作QQ自動登陸軟件

編輯:關於VC++

近日由於在華為培訓,期間因為導師們忙得要緊,沒那麼多時間去教導我們,只是給我們看文檔和代碼,看完了,沒事就想出這個來玩玩了。這裡要先用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消息。其它的大家可以隨意發揮了!

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved