(三) 枚举所有窗口,找属于QQ.exe的窗口
BOOL CALLBACK EnumAllWindowsProc(HWND hwnd,LPARAM lParam)
{
if(hwnd == NULL)
{
return FALSE;
}
//QQ.exe的ID
DWORD dwQQProcessID;
dwQQProcessID = (DWORD)lParam;
GetWindowThreadProcessId(hwnd,&dwCreateWindowProcessID);
//如果创建QQ.exe的进程等于创建窗口的进程
if(dwQQProcessID == dwCreateWindowProcessID)
{
LONG lWindowStyle;
//找到窗口的风格
lWindowStyle = GetWindowLong(hwnd,GWL_STYLE);
//如果条件成立,表示当前窗口为登陆窗口
if(lWindowStyle == QQLoginDlgNormalStyle ||
lWindowStyle == QQLoginDlgMiniStyle)
{
//保存登陆窗口的句柄
hLoginWindow = hwnd;
}
}
return TRUE;
}
该回调函数执行完后,就得到QQ登陆窗口的句柄。保存在hLoginWindow中。
(四) 获取用户名、密码、登陆按钮的句柄
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd,LPARAM lParam)
{
if(hwnd == FALSE)
{
return FALSE;
}
LONG lID;
//取得所有子窗口的ID
lID = GetWindowLong(hwnd, GWL_ID);
//该句表示找到用户名的句柄
if(lID == QQLoginUserNameId)
{
hUserName = hwnd;
}
else if(lID == QQLoginPasswordId)
{
hUserPwd = hwnd;
}
else if(lID == QQLoginButtonId)
{
hLoginButton = hwnd;
}
return TRUE;
}
注意:以上回调函数用到了三个变量,别忘了在顶部定义哦!
//用户名、密码、登陆按钮的句柄
HWND hUserName;
HWND hUserPwd;
HWND hLoginButton;