MFC枚举窗口
去年七月份开始学C#,今年六月份因为公司的原因,重新学习MFC。
以前一直以为VC++编程很麻烦,现在越来越感觉到上手了;尽管VC++没有VS那样方便,MFC不像C#那样易上手,但从效率上讲MFC是很好的选择,只是动态库及多线程没有C#方便,这是比较郁闷的。
近来写QQ游戏的外挂,写了找茬的、连连看的,昨晚上写火拼俄罗斯的时出问题了,游戏窗口获取的不对,问个网友才知道栏题是“火拼俄罗斯方块”的窗口不是一个,所以得枚举窗口。
现在网上枚举窗口最多的就是EnumWindows,这是要回调函数的,回调的函数必须是全局的,或者静态的,对MFC来说太麻烦了。寻找窗口MFC用CWnd::FindWindow,对应的API是FindWindow;枚举窗口API是EnumWindows,MFC也应该有对应的啊。刚刚研究了一下发现一个好办法。
CWnd* wnd = this;
while(true)
{
if(wnd == NULL)
break;
CRect rect;
wnd->GetWindowRect(&rect);
CString str;
wnd->GetWindowText(str);
if(rect是你想要的窗口的大小&&str是你想要的窗口的标题)
{
break;
}
wnd = wnd->GetNextWindow(GW_HWNDNEXT);
}
if(wnd != NULL)
{
wnd对应的窗口就是你想要的
}
好久没写博客了,分享一下。
以前一直以为VC++编程很麻烦,现在越来越感觉到上手了;尽管VC++没有VS那样方便,MFC不像C#那样易上手,但从效率上讲MFC是很好的选择,只是动态库及多线程没有C#方便,这是比较郁闷的。
近来写QQ游戏的外挂,写了找茬的、连连看的,昨晚上写火拼俄罗斯的时出问题了,游戏窗口获取的不对,问个网友才知道栏题是“火拼俄罗斯方块”的窗口不是一个,所以得枚举窗口。
现在网上枚举窗口最多的就是EnumWindows,这是要回调函数的,回调的函数必须是全局的,或者静态的,对MFC来说太麻烦了。寻找窗口MFC用CWnd::FindWindow,对应的API是FindWindow;枚举窗口API是EnumWindows,MFC也应该有对应的啊。刚刚研究了一下发现一个好办法。
CWnd* wnd = this;
while(true)
{
if(wnd == NULL)
break;
CRect rect;
wnd->GetWindowRect(&rect);
CString str;
wnd->GetWindowText(str);
if(rect是你想要的窗口的大小&&str是你想要的窗口的标题)
{
break;
}
wnd = wnd->GetNextWindow(GW_HWNDNEXT);
}
if(wnd != NULL)
{
wnd对应的窗口就是你想要的
}
好久没写博客了,分享一下。