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

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);
}
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); // 貼上
}
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);
}
CButton* pBtn = (CButton*)pWnd->GetDlgItem(16032);
if (pBtn) {
pBtn->PostMessage(WM_LBUTTONDOWN, 0, 0);
pBtn->PostMessage(WM_LBUTTONUP, 0, 0);
}
設定 WM_TIMER 定期檢查並執行上述流程。
同樣原理可用於:隱藏干擾視窗 (WM_HIDE)、自動化測試、跨程序資料填入等。核心在於 Spy++ 定位控件 → 取得 Handle → Send/PostMessage。
僅供技術研究學習,請勿用於非法自動化操作或違反服務條款之行為。