程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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