用FindWindow获取了一个主窗口的句柄,如何能把它的全部子窗口的名字打印出来

需求:用FindWindow获取了一个主窗口的句柄,如何能把它的全部子窗口的名字打印出来获取父窗口句柄HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主窗口句柄或者HWND hWnddlg = this->m_hWnd; //主窗口句柄获取子窗口句柄如果子窗口是控件,并有控件ID号, 则如下获取其子窗口句柄HWND hwnd=::...
摘要由CSDN通过智能技术生成


需求:用FindWindow获取了一个主窗口的句柄,如何能把它的全部子窗口的名字打印出来

获取父窗口句柄
HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主窗口句柄
或者
HWND hWnddlg = this->m_hWnd; //主窗口句柄

获取子窗口句柄
如果子窗口是控件,并有控件ID号, 则如下获取其子窗口句柄
HWND hwnd=::GetDlgItem(hWnddlg,IDC_BUTTON_SETUPBLOCK); //子窗口句柄

如果子窗口是窗体,则可以通过其成员变量m_bodyPanel的成员函数GetDlgCtrlID()来获取子窗口的ID 然后通过GetDlgItem来获取其子窗口句柄
HWND hwnd =::GetDlgItem(hWnddlg,m_bodyPanel.GetDlgCtrlID());

获取子窗口实例句柄
HINSTANCE hInstance = (HINSTANCE) GetwindowLong(m_hWnd /* 子窗口句柄*/, GWL_HINSTANCE);

获取窗口句柄还可以通过:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器

  HWND hwnd = pwnd->m_hwnd; //得到它的HWND

HWND FindWindow(
LPCTSTR lpClassName, //Class name
LPCTSTR lpWindowName //window name
);
获取当前应用程序实例句柄
1 在CMyProjectApp类中
在这个类的源文件中会有一个该类的实例CMyPrjectApp theApp;
该类继承自CWinApp类&#

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
函数功能 在窗口列表中寻找与指定条件相符的第一个窗口 。 该函数获得一个窗口的句,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找窗口,从排在给定的窗口后面的下一个窗口开始。在查找时不区分大小写。 参数; (1)hwndParent:要查找的窗口所在的父窗口的句(如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索窗口)。 如果hwndParent为 0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有窗口。 Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。 (2)hwndChildAfter :窗口。查找从在Z序中的下一个窗口开始。窗口必须为hwndParent窗口的直接窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。 (3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。 (4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。 返回值 Long,找到的窗口的句。如未找到相符窗口,则返回零。会设置GetLastError 如果函数成功,返回值为具有指定类名和窗口名的窗口。如果函数失败,返回值为NULL。 若想获得更多错误信息,请调用GetLastError函数。
获取窗口可以使用Windows API函数FindWindowFindWindowEx。以下是用易语言实现获取窗口的示例代码: ```vb ' 引入Windows API函数 Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long ' 查找指定窗口标题的顶级窗口 Function FindTopLevelWindow(ByVal Title As String) As Long FindTopLevelWindow = FindWindow(vbNull, StrPtr(Title)) End Function ' 查找指定父窗口窗口标题的窗口 Function FindChildWindow(ByVal ParentHwnd As Long, ByVal ClassName As String, ByVal Title As String) As Long FindChildWindow = FindWindowEx(ParentHwnd, 0, StrPtr(ClassName), StrPtr(Title)) End Function ' 示例用法 Sub Main() Dim hWnd As Long ' 查找记事本窗口 hWnd = FindTopLevelWindow("无标题 - 记事本") If hWnd <> 0 Then ' 查找记事本编辑框窗口 hWnd = FindChildWindow(hWnd, "Edit", vbNullString) If hWnd <> 0 Then MsgBox "找到编辑框句:" & hWnd Else MsgBox "未找到编辑框句" End If Else MsgBox "未找到记事本窗口" End If End Sub ``` 上述代码中,FindWindow函数用于查找顶级窗口FindWindowEx函数用于查找窗口。函数的参数lpClassName和lpWindowName分别表示窗口类名和窗口标题,可以通过vbNull或vbNullString表示为空。StrPtr函数用于将字符串转换为指向该字符串的指针,以便传递给API函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值