查找子窗口

xflin 2004-11-19 01:50:44
现在我碰到一个问题:假设已知父窗口的句柄是:2229472,我需要查找父窗口下的子窗口为AfxMDIFrame70su类,没有标题。
但问题就在,父窗口下总共有三个AfxMDIFrame70su类,分别的句柄是:2098426,,,,1180862,,,2098292,,我所需要的是第二个(1180862这个句柄),我用findWindowsEx函数查找,但只能找到第一个(2098426这个句柄),是不是findWindowsEx只能查找符合条件的第一个子窗口啊,那我这个问题怎么解决呢,有办法吗?
...全文
360 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DemonLoveLizzy 2004-11-25
  • 打赏
  • 举报
回复
何况像你那样来,未必就找得到。
DemonLoveLizzy 2004-11-25
  • 打赏
  • 举报
回复
//和DemonLoveLizzy(▲▲▲▲▲) 兄说的还是有些差异哦。

我说的才是正确的用法。你应该可以想到的,一个函数里不可能有根本用不到的参数。
xflin 2004-11-21
  • 打赏
  • 举报
回复
搞定,,原来FINDWINDOWSEX的用法是,

AAA=findWindowsEx(主窗口HWND,0,‘AfxMDIFrame70su’,NIL);
BBB=findWindowsEx(AAA,0,‘AfxMDIFrame70su’,NIL);

和DemonLoveLizzy(▲▲▲▲▲) 兄说的还是有些差异哦。给分!
ziyoulianmeng 2004-11-21
  • 打赏
  • 举报
回复
findWindowsEx
beyondtkl 2004-11-21
  • 打赏
  • 举报
回复
同意 DemonLoveLizzy(▲▲▲▲▲) (
FindWindowEx的第二个参数把第一次找到的传进去。。
xflin 2004-11-20
  • 打赏
  • 举报
回复
有方法可以办到吗?我想如果用遍历子窗口的方法也许可行,,但是还有更好的吗?
xuhao1 2004-11-20
  • 打赏
  • 举报
回复
使用GetWindow可以实现,具体用法请看帮助
DemonLoveLizzy 2004-11-20
  • 打赏
  • 举报
回复

AAA=findWindowsEx(主窗口HWND,0,‘AfxMDIFrame70su’,NIL);
找到第1个AfxMDIFrame70su类的控件句柄,
然后从得到的句柄再找起。
BBB=findWindowsEx(主窗口HWND,AAA,‘AfxMDIFrame70su’,NIL);

这个BBB就是第2个的句柄了。看看findWindowsEx的介绍,这100分不就省了么
xflin 2004-11-19
  • 打赏
  • 举报
回复
对啊,我用findWindowsEx查找的时候,,老是找到2098426这个句柄,所以我想是不是findWindowsEx是不是只能查找符合条件的第一个子窗口,如果我要查找符合条件的第二个呢?
aiirii 2004-11-19
  • 打赏
  • 举报
回复
>>那个是遍历窗口的啊,我需要的是父窗口下的子窗口,而且是第二个,
在遍歷中也可找到你要的東西

正常用 findWindowsEx 應該是可以的, 你說不行, 有點奇怪
xflin 2004-11-19
  • 打赏
  • 举报
回复
那个是遍历窗口的啊,我需要的是父窗口下的子窗口,而且是第二个,
jinjazz 2004-11-19
  • 打赏
  • 举报
回复
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): Boolean; stdcall;
var
cName: array[0..180] of Char;
wName: array[0..32] of Char;
tHandle: Longword;
begin
result := true;
GetClassName(hwnd, cName, 32); {类名}
GetWindowText(hwnd, wName, 180); {窗口名}
tHandle := GetWindowLong(hwnd, GWL_STYLE); {判断窗体是否可见}
if (WS_VISIBLE and tHandle) > 1 then
Form1.Memo1.Lines.Append(IntToStr(hwnd)+ Chr(2) + StrPas(cName) + chr(2) + StrPas(wName));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc, 0);
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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