模拟
昨天看到一本外挂书,上面讲的是模拟操作.
然后就做了个QQ的自动登录,其实蛮简单的……
然后发现qq2011的TXEdit控件能够获取得到账号
并且使用WM_SETTEXT能够设置控件的文字
ID是这样设置的。
然后就是设置密码框,这块是模拟的,用的event..
贴代码
#include <windows.h>
#include <cstdio>
HWND hQQ;
HWND hIDEdit;
HWND hPsEdit;
wchar_t str[50];
char ps[50];
RECT rt;
int psLen;
int wstrlen(wchar_t *str)
{
int i = 0;
while(str[i] != L'\0')
{
i++;
}
return i;
}
int main()
{
hQQ = FindWindow(NULL, L"QQ2011");
if(NULL == hQQ)
{
printf("QQ2011未运行\n");
}
else
{
printf("QQ已运行\n");
ZeroMemory(str, sizeof(str));
wsprintf(str, L"xxxxxxxxxxxxx");//填入ID
sprintf(ps, "xxxxxxxxxxx");
LPARAM lParam = 0x412e0001;
hIDEdit = FindWindowEx(hQQ, NULL, L"TXEdit", NULL);
hPsEdit = FindWindowEx(hQQ, NULL, L"Edit", NULL);
if(hIDEdit)
{
printf("已经找到账号输入控件\n");
SendMessage(hIDEdit, WM_SETTEXT, 0, (LPARAM)str);
printf("账号已输入\n");
}
else
{
printf("账号输入寻找失败\n");
}
if(hPsEdit)
{
printf("已经找到密码输入控件\n");
GetWindowRect(hPsEdit, &rt);
SetCursorPos(rt.left + 150, rt.top + 2);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
//这里清除所有的可能残留密码
int n = 20;
while(n--)
{
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0, 2, 0);
}
psLen = strlen(ps);
for(int i = 0; i < psLen; i++)
{
if(ps[i] >= '0' && ps[i] <= '9')
{
keybd_event(ps[i], 0, 0, 0);
keybd_event(ps[i], 0, 2, 0);
}
else
{
keybd_event(L'A' + (ps[i] - L'a'), 0, 0, 0);
keybd_event(L'A' + (ps[i] - L'a'), 0, 2, 0);
}
}
//SendMessage(hPsEdit, WM_SETTEXT, 0, (LPARAM)ps);
printf("已经输入密码\n");
SetCursorPos(rt.left + 180, rt.top + 85);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
printf("单击登录已完成\n");
}
}
printf("===========================================\n登录已完成\n===========================================\n");
getchar();
/* hNote = FindWindow(NULL, L"无标题 - 记事本");
if(NULL == hNote)
printf("记事本未运行");
else
printf("记事本已经打开");
hNote = FindWindowEx(hNote, 0, L"Edit", 0);
while(true)
{
Sleep(2000);
PostMessage(hNote, WM_KEYDOWN, 'A', 0);
PostMessage(hNote, WM_KEYUP, 'A', 0xC0000000);
}*/
}
浙公网安备 33010602011771号