EnumWindows和FindWindowEx和SPY++的问题~~~~此题有难度

little_duck 2005-05-11 11:52:57
请问各位 我现在遇见这样的问题 我用SPY++查找软件(浩方)对话框层
我用::EnumWindows(EnumWindowsProc,NULL)枚举所有窗口,经过辨认找到该对话框在他下面的层是#32770 (Dialog),再下面又有2个#32770 (Dialog)和其它的层 问题出来了 我需要查找第2个#32770 (Dialog)层里面的东西 但是我的代码只能查找到第1个#32770 (Dialog) 请问 该怎么办
-----------------------------------------------------------------------------------------
void CAaaDlg::OnButton1()
{
CString str;
GetDlgItem(IDC_BUTTON2)->GetWindowText(str);

BOOL retCode = ::EnumWindows(EnumWindowsProc,NULL);//枚举窗口
}
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)
{
TCHAR czWndText[MAX_LOADSTRING];
::GetWindowText(hWnd,czWndText,MAX_LOADSTRING);
TCHAR czClsName[MAX_LOADSTRING];
::GetClassName(hWnd,czClsName,MAX_LOADSTRING);
CString strWndText(czWndText);
CString strClsName(czClsName);
int iLen = strWndText.GetLength();


if ( -1 != strWndText.Find(_T("浩方对战平台")) )
FindNextWindow(hWnd,lParam);
return TRUE;
}

BOOL FindNextWindow(HWND hWnd,LPARAM lParam)
{
HWND hWnd32770 = ::FindWindowEx(hWnd,NULL,_T("#32770"),NULL);
HWND hWnd327701 = ::FindWindowEx(hWnd32770,NULL,_T("#32770"),NULL);//第1个#32770 (Dialog) 只能查找到第一个#32770 (Dialog) 在该层有2个#32770 (Dialog)
//HWND hWndTarget = ::FindWindowEx(hWnd327701,NULL,_T("AfxWnd42"),NULL);
//HWND hWnd327702 = ::FindWindowEx(hWndTarget,NULL,_T("#32770"),NULL);
//HWND hWndSys = ::FindWindowEx(hWnd327702,NULL,_T("SysListView32"),NULL);//我是想查找到这个层在第2个#32770 (Dialog)层里面
if(hWnd327701)
{
AfxMessageBox("aaaaaaaaaaaa");
}
return TRUE;
}
...全文
407 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry 2005-05-12
  • 打赏
  • 举报
回复
EnumChildWindow
oyljerry 2005-05-12
  • 打赏
  • 举报
回复
EnumChildWindow枚举所有的子窗口来比较
xuzheng318 2005-05-12
  • 打赏
  • 举报
回复
EnumChildWindow枚举窗口来比较
42252343 2005-05-12
  • 打赏
  • 举报
回复
昏 你把上一次查找到的句柄做为参数 传给下一次FindWindowEx第2个参数 这样还不明白吗??
int i=0;
HWND hBeginWnd=NULL;
while(1)
{
hBeginWnd=FindWindowEx(hWndTarget,hBeginWnd,_T("#32770"),NULL);
if(hBeginWnd!=NULL)
{
i++;
}
if(i==2)
break;
}
hBeginWnd就是你想要的
随手写的 没经调试 不过应该没问题思路就是这样 如果还是搞不懂的话 我也没办法
Hendy_So 2005-05-12
  • 打赏
  • 举报
回复
这个窗口总得有自己的特征吧,不然你怎么判断你需要什么窗口。
Dynamic 2005-05-12
  • 打赏
  • 举报
回复
哈哈哈
little_duck 2005-05-12
  • 打赏
  • 举报
回复
谢谢 各位..........
如果用EnumChildWindow枚举所有的子窗口来比较 那么比较什么呢 如果 CAPTION都为"" 那么就不好比较了。还有FindWindowEx(,,,,);的第2个参数 我看MSDN也就是如果为空的话 那么就从第一个子窗口开始查找 但是如果第1个窗口查找了以后怎么查找第2个窗口呢。要循环查找一个层里的所有窗口是用FINDWINDOW好呢 还是用其它的呢 最好给点代码 谢谢了
42252343 2005-05-11
  • 打赏
  • 举报
回复
但是我的代码只能查找到第1个#32770 (Dialog)
---------------------------------------------
HWND hWnd1;
HWND hWnd=FindWindowEx(hWndTarget,hWnd1,_T("#32770"),NULL);

hWnd1为你第1个窗口的句柄 传入第2个参数代表从hWnd1开始查找下一个符合条件的HWND

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧