模拟

昨天看到一本外挂书,上面讲的是模拟操作.

然后就做了个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);
}
*/
}

posted on 2012-02-13 18:28  z光束star  阅读(350)  评论(0)    收藏  举报

导航