获取窗口句柄(内部窗体)

要找到某个CWnd对象的HWND,用GetSafeHwnd()。

 

在窗口类中,可以直接访问: m_hWnd  
在窗口类外,可以用AfxGetMainWnd()->m_hWnd获得。

 

在MainFrame里直接用this;  
其它地方用  CMainFrame*   pMainFrame   =   (CMainFrame*)theApp.m_pMainWnd;  

 

想得到一个控件的的句柄

GetDlgItem(ID_XXXXX)->m_hWnd

 

得到视图的句柄

AfxGetMainWnd()->GetActiveView();

SDI:  
  ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();      

MDI:  
  ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveFrame()->GetActiveView();  

 

GetSafehWnd 取你程序所在窗口类的句柄
GetActiveWindow 取当前活动窗口句柄
AfxGetMainWnd 取主窗口句柄
GetForegroundWindow 取前台窗口句柄
FindWindow 通过类名,标题获取窗口句柄
EnumWindow 自己创建回调函数,通过系统的迭代枚举所有窗口句柄

### 如何使用句柄精灵获取窗口句柄 在按键精灵或其他自动化工具中,获取窗口句柄是一项基础而重要的技能。以下是关于如何利用句柄精灵或类似方法来获取目标窗口及其子窗口句柄。 #### 使用句柄精灵获取窗口句柄 句柄精灵是一种专门用于捕获窗口句柄及相关属性的小型工具。它能够帮助开发者快速定位到特定的窗口以及其内部控件。具体操作如下: - 打开句柄精灵并启动目标程序。 - 利用鼠标悬停功能,在句柄精灵界面中点击“查找窗口”按钮,随后将鼠标移动至目标窗口上即可自动显示该窗口的相关信息,包括句柄值、类名和其他属性[^1]。 #### 获取多个相同类型的子窗口句柄 当遇到具有相同类名的多个子窗口时,仅依靠简单的查找可能只会返回第一个匹配项。为了找到后续的同类型子窗口,可以采用以下策略: - **遍历法**:编写脚本逐层遍历父窗口下的所有子窗口直到发现所需实例为止。例如,在按键精灵中可以通过 `FindWindowEx` 函数实现更深层次的搜索逻辑[^2]。 ```vbscript Dim hwndParent, hwndChild, iCount hwndParent = FindWindow("Popo.UI.MainFrame") ' 假设这是主窗体的类名 iCount = 0 Do While True hwndChild = FindWindowEx(hwndParent, hwndChild, "Popo.UI.Controls.Class.SkinSplitter", "") If hwndChild = 0 Then Exit Do Debug.Print "Found child window #" & (iCount + 1) & ": Handle=" & hwndChild iCount = iCount + 1 Loop ``` 上述代码片段展示了如何通过循环调用 `FindWindowEx` 来逐一检索指定父级下所有的 “SkinSplitter” 类型子窗口,并打印它们各自的句柄值。 #### 工具推荐 除了手动编码外,还可以借助一些第三方软件辅助完成复杂的句柄抓取工作。比如 Spy++ 是 Microsoft 提供的一款调试工具,它可以直观地展示应用程序内的各个层次结构关系;AutoIt Window Info Tool 同样适用于此类场景分析。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值