用Visual C++设计QQ群管理工具[组图](2)
现在的问题是要先把想T的人找出来.怎么样在list中把想T的人给找出来呢,我的想法是枚举这个list里所有人的QQ号,然后跟想要T的QQ号作比较,如果有相同的,就把list里的这一项选中,然后我们就可以进一步的操作了.那现在就可以把问题转化为,枚举list,获得list里的项的信息.我用spy++查看了一下那个"群设置"窗口,如图所示:
图二 用spy++查看的窗口关系
最顶层的就是那个"群设置"窗口了,那个显示成员的list原来是一个syslistview32类型的控件,包含在一个类型为"#32770"的 dialog中,我们只要顺着最顶层的窗口中,一层层的窗口找下去就可以得到我个想要的那个list窗口的名柄了,呵呵,之后,就可以向这个list发出消息,让它干活了.想到这,偶心时狂喜了一阵子.但是在实现过程中却是不是那么的顺利的.在顶层窗口中找那个list的句柄,并不是什么困难的事.把桌面上的把有窗口都枚举一遍,就要以找到窗口名为”群设置”的窗口了.
EnumWindows(EnumWindowsProc,0);//枚举所有的窗口
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
TCHAR buff[1000];
int buffsize(100),nPosition(-1);
HWND hQQWnd=NULL;
::GetWindowText(hwnd,buff,buffsize);
if (strlen(buff)<1)
return TRUE;
CString str(buff);
nPosition=str.Find(_T("群设置")); //这里设置要找的窗口名
if(nPosition!=-1)
EnumChildWindows(hwnd,ChildWndProc,0);//继续找子窗口
return TRUE;
}