用GetWindow枚举子窗口句柄的问题

一如既往哈 2011-02-24 10:08:49
各位大侠,近日突然发现 用GetWindow枚举子窗口句柄出问题了,得到的句柄值都很小,与实际的不相符,这是怎么回事?


附上我的vb代码:

Option Explicit
Public Const GW_CHILD = 5
Public Const GW_HWNDNEXT = 2
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Integer) As Integer
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
'枚举某一个窗口的子窗口
Public Sub ListAllChildWindow(Optional bParentHwnd As Long)
On Error Resume Next
Dim Str As String * 256 '定义str用来存储子窗体类名
Dim hd As Long, w2 As String
If bParentHwnd = 0 Then bParentHwnd = GetDesktopWindow '桌面hwnd
hd = GetWindow(bParentHwnd, GW_CHILD) '获取Form的第一个子窗体句柄hd
Do While hd <> 0 '如果子窗体查找完毕hd返回0,所以用hd<>0作为继续查找条件
GetClassName hd, Str, 256 '获得子窗体类名存储在str里
w2 = Left$(Str, InStr(Str, Chr$(0)) - 1)
Debug.Print w2 & "----" & hd
hd = GetWindow(hd, GW_HWNDNEXT) '获取下一个同级子窗体句柄hd
Loop
End Sub
Sub Test()
ListAllChildWindow Me.Hwnd
End Sub
’下面是得到的结果:
'ThunderTextBox ----3996(正确的hwnd: 23728126)
'ThunderTextBox ----4094(正确的hwnd: 8195996)
'ThunderCommandButton ----3862


期盼大侠们指点迷津。。。。。。。。。。。。。。
...全文
637 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2011-02-25
  • 打赏
  • 举报
回复
比Enumchildwindow还方便
Lactoferrin 2011-02-25
  • 打赏
  • 举报
回复
GetWindow是可以枚举子窗口的
贝隆 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenjl1031 的回复:]
枚举子窗口要用Enumchildwindow:
[/Quote]
+1
第一次听说GetWindow可以枚举子窗体
东方之珠 2011-02-24
  • 打赏
  • 举报
回复
枚举子窗口要用Enumchildwindow:
一如既往哈 2011-02-24
  • 打赏
  • 举报
回复
知道了,Getwindow函数写错了,应该是 as long,结果悲剧发生了........

1,488

社区成员

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

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