首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 實作 QQ 自動登入工具:視窗訊息模擬與跨程序控制

     編輯:關於VC++

核心原理

使用 Spy++ 取得 QQ 登入視窗各控件類別名/ID,透過 FindWindow/GetDlgItem 取得控件控制代碼,發送視窗訊息模擬鍵盤輸入與滑鼠點擊,實現自動填帳號、密碼並登入。

關鍵實作步驟

1. 偵測並啟動 QQ

CWnd* pWnd = FindWindow(_T("#32770"), _T("QQ用戶登錄"));
if (!pWnd) {
    PROCESS_INFORMATION pi; STARTUPINFO si = { sizeof(si) };
    si.dwFlags = STARTF_FORCEOFFFEEDBACK;
    CreateProcess(_T("D:\\Tencent\\qq\\CoralQQ.exe"), NULL, NULL, NULL, FALSE,
                  NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
}

2. 填入帳號 (ComboBox 可用 WM_PASTE)

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);          // 貼上
}

3. 填入密碼 (Edit 採鍵盤加密,需逐字元 WM_CHAR)

CWnd* pChild = pWnd->GetNextWindow(GW_CHILD);
pChild = pChild->GetNextWindow(GW_HWNDNEXT);  // 遍歷子視窗
while (pChild) {
    CEdit* pPwd = (CEdit*)pChild->GetDlgItem(16038);
    if (pPwd) {
        // Unicode 專案需轉換為 ANSI
        char buf[20] = {0};
        WideCharToMultiByte(CP_ACP, 0, m_strPassword, -1, buf, 20, NULL, NULL);

        pPwd->SetSel(0, -1); pPwd->Clear();  // 清空密碼框
        for (int i = 0; buf[i]; i++) {
            pPwd->SendMessage(WM_CHAR, (WPARAM)buf[i], 0);  // 逐字發送
        }
        break;
    }
    pChild = pChild->GetNextWindow(GW_HWNDNEXT);
}

4. 點擊登入按鈕

CButton* pBtn = (CButton*)pWnd->GetDlgItem(16032);
if (pBtn) {
    pBtn->PostMessage(WM_LBUTTONDOWN, 0, 0);
    pBtn->PostMessage(WM_LBUTTONUP, 0, 0);
}

5. 定時器實現自動登入

設定 WM_TIMER 定期檢查並執行上述流程。

技術延伸

同樣原理可用於:隱藏干擾視窗 (WM_HIDE)、自動化測試、跨程序資料填入等。核心在於 Spy++ 定位控件 → 取得 Handle → Send/PostMessage。

法律與道德提醒

僅供技術研究學習,請勿用於非法自動化操作或違反服務條款之行為。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved