(三) 枚举所有窗口,找属于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;
|