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

LPCWSTR lpc=TEXT("计算器");
HWND hWnd=FindWindow(NULL,lpc);
比如这个,如何能把计算机我获取的这个主窗口的全部子窗口的名字全部显示出来,比如下面菜单栏的查看,帮助这种的名字在控制台上打印出来。
我是在VS2010上cpp文件上写的,求大佬帮帮忙。

3个回答

获取父窗口句柄
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类, 类中有一个成员m_hInstance即为当前应用程序实例句柄。
MSDN中:可以用全局函数AfxGetInstanceHandle()取得。

2 WINE32 API GetWindowLong
HINSTANCE hInstance = (HINSTANCE) GetwindowLong(m_hWnd /* 窗口句柄*/, GWL_HINSTANCE);
3 AfxGetApp()
全局函数返回一个CWinApp * 指针,再取得成员函数m_hInstance

3 Example
加在自定义图标(非系统)
m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
m_hIcons[1]=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));
m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));
m_hIcons[3]=LoadIcon( (HINSTANCE)GetWindowLong(m_hWnd, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICON4));
NOTE:如果是加在系统的标准图标,则:LoadIcon(NULL, IDI_XXX);
MAKEINTRESOURCE(WORD para) 根据资源ID返回一个指向该资源的字符指针,见MSDN中::LoadIcon()用法

BOOL CALLBACK EnumChildWindowProc(HWND Child_hWnd,LPARAM lParam)
{
string WindowTextStr = "";
if(Child_hWnd)
{
GetWindowText(Child_hWnd,&WindowTextStr.c_str(),WindowTextStr.max_size());
cout << Child_hWnd << "\t" <<WindowTextStr;
return true;
}
return false;
}

void EnumChildWindow()
{
HWND hWnd = NULL;
hWnd = FindWindow();
EnumChildindows(hWnd,EnumChildWindowProc,0);
}

找到主窗口,接下来 FindWindowEx GetWindowText

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何查找窗体,获取窗体的句柄,Hwnd FindWindow函数
/*CWnd::FindWindow static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTRlpszWindowNa- me ); 返回值: 标识了具有指定的类名或窗口名的窗口。如果没有找到这样的窗口,则返回NULL。 返回的CWnd*值可能是临时的,不能被保存以供将来使用。 参数: lpszC
递归方式+FindWindow 遍历窗口句柄。查找已知句柄下的所有句柄。按节点方式保存
初入门,碍于使用句柄时遇到问题,便写的遍历句柄只法
vc获得窗口并枚举其子窗口
 调用函数FindWindow(窗口类名,窗口标题)获得窗口的句柄,然后调用EnumChildWindows(父窗口,回调函数名,参数)来获得父窗口下的子窗口的句柄,代码实现如下  #include BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam); void main(int argc, char* argv[]) {
区别 FindWindow,FindWindowEx,EnumWindows,EnumChildWindows
1. FindWindow() HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName); 功能:查找与指定窗口类名和窗口名称相匹配的顶级窗口,这个函数不搜索子窗口。 参数:如果lpClassName为null,将会寻找任何与lpWindowName参数匹配的窗口,如果lpWindowName为NULL,则匹配所有窗口名。 返回值:成
如何获得窗口句柄(FindWindow函数的使用)
一: 获得主窗口 HWND WINAPI FindWindow( _In_opt_  LPCTSTR lpClassName, _In_opt_  LPCTSTR lpWindowName ); 该函数通过创建窗口时的类名和窗口名查找窗口并返回该窗口的句柄,函数不会搜索子窗口。该函数区分大小写。 参数lpClassName [in, optional]Type: LPCTSTR类
得到窗口的句柄(有标题栏和无标题栏)
工作中遇到这样的问题:启动一个升级程序,根据版本号来判断是否升级。之前是用CreateToolhelp32Snapshot来获取进程,进而关闭进程、升级程序、重启程序。 但问题是我的主程序是有托盘的,直接关进程托盘图标不消失(鼠标移上去消失)。 后来想到给主程序发消息,通知程序关闭,但是需要获取对话框的句柄,进入正题。 有标题栏的对话框: CWnd *pWnd=CWnd::FindWind
获取多个同名窗口的句柄
#include HWND gameh,gameh2,gameh3; //定义三个句柄 PCHAR winCaption = "诛仙2"; //窗口名称 HWND windowhWnd = 0; HWND gameall[3]; //存放同名窗口句柄的数组 bool CALLBACK enumWindowProc1(HWND hWnd,LPARAM lParam) { ch
IE关闭主窗口时,同时关闭所有的子窗口
我们在编写页面过程中,可能会通过 window.open 方法来打开多个子窗口。这样一来,在想关闭窗口的时候只能一个个的关闭所有打开的窗口,太烦了。那么有没有简单的办法,使得在关闭主窗口的时候,将所有附属的子窗口也一起关闭呢?嗯,既然写这篇BLOG了,答案肯定是有了哈。但不一定是很好的方法,只是实现了这个功能而已。其实,也没什么,只是在OPEN打开一个窗口时,使用一个数组记住了它的句柄。 上代码
GetWindow、GetTopWindow和GetNextWindow(窗口句柄获取!!!)
GetWindow、GetTopWindow和GetNextWindow GetWindow    [delphi] view plaincopy //uCmd 可选值:  GW_HWNDFIRST = 0; {同级别第一个}  GW_HWNDLAST  = 1; {同级别最后一个}  GW_HWNDNEXT  = 2; {同级别下一个}  GW_HWNDP
DELPHI用FindWindow、FindWindowEx - 查找窗口
FindWindow( lpClassName, {窗口的类名} lpWindowName: PChar {窗口的标题}): HWND; {返回窗口的句柄; 失败返回 0}//FindWindowEx 比 FindWindow 多出两个句柄参数:FindWindowEx( Parent: HWND; {要查找子窗口的
window api遍历窗口及窗口下面的控件
<br />using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Windows
MFC 窗口句柄获取
句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息、处理程序):0。获取所在类窗口的句柄: this->m_hwnd 1。主窗口的句柄: 无论在主窗口类内,还是子窗口类内,获取主窗口句柄的方法: AfxGetMainWnd()->m_hWnd, 如:::SendMessage(AfxGetMainWnd()->m_hWnd , WM_MY_DOSOME , 0 ,(LPARAM)
mfc获取子窗口句柄总结
1.FindWindow,根据顶级窗口的类名或者标题名获得顶级窗口句柄 2.::EnumChildWindows(m_mhd,EnumChildProc,0); 根据顶级窗口筛选出可以可以分辨出离目标子窗口最近的子窗口,EnumChildProc这里可以获得每个子窗口的句柄,可以根据句柄获得子窗口所有消息,是回调函数 BOOL CALLBACK EnumChildProc(   HWND
MFC获得主窗口和父窗口指针
MFC编程中常常遇到子窗口向父窗口传递参数的情况,这就需要获得父窗口的指针。         例:主对话框CMyMainDlg通过按钮ButtonA进入对话框CMyParentDlg,CMyParentDlg在通过按钮ButtonB进入对话框CMyChildDlg。现在需要在CMyChildDlg分别访问CMyParentDlg和CMyMainDlg的内容,需要在CMyChildDlg中加入
MFC 获取当前窗口句柄,或者父子窗口句柄
父子窗口 在子窗口中,需要用到父窗口的句柄: AfxGetMainWnd()->m_hWnd 注:在父窗口中,也可以这么用来调用自己窗口的句柄 在子窗口中,需要用到自己窗口的句柄 ChildDlg *pChildDlg ; pChildDlg->m_hWnd   注:在自己窗口中,要用自己窗口的句柄,便是先获得窗口对象的指针,然后直接指向m_hWnd,便是句柄了
MFC获取窗口句柄号的六种方法
窗口句柄号
Python实现遍历windows所有窗口并输出窗口标题的方法
#! /usr/bin/env python # -*- coding: utf-8 -*- from win32gui import * titles = set() def foo(hwnd,mouse): #去掉下面这句就所有都输出了,但是我不需要那么多 if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwn...
遍历窗口句柄
对于获取窗口句柄,较为常用的是FindWindows API函数。当用同名窗口时候,单纯的利用findwindow函数就很难获得自己想要的窗口。 这个时候就需要遍历窗口。利用getwindow函数就可以实现。 BOOL getWinTest() { CWnd *pDesktopWnd = CWnd::GetDesktopWindow(); CWnd *pWnd = pDesktopWnd-
duilib底层机制剖析:窗体类与窗体句柄的关联
看到群里朋友有人讨论WTL中的thunk技术,让我联想到了duilib的类似技术。这些技术都是为了解决c++封装的窗体类与窗体句柄的关联问题。而我觉得duilib解决这个问题的方法要比thunk简单好用
pythonwin-win32gui 窗口查找和遍历
#coding=utf-8 __author__ = 'Administrator' __doc__ = ''' pythonwin中win32gui的用法 本文件演如何使用win32gui来遍历系统中所有的顶层窗口, 并遍历所有顶层窗口中的子窗口 ''' import win32gui from pprint import pprint def gbk2utf8(s): retu
从父窗口中获取子窗口句柄以及其实例句柄
获取父窗口句柄 HWND hWnddlg = AfxGetMainWnd()->m_hWnd;  //主窗口句柄 或者 HWND hWnddlg = this->m_hWnd; //主窗口句柄 获取子窗口句柄 如果子窗口是控件,并有控件ID号, 则如下获取其子窗口句柄 HWND hwnd=::GetDlgItem(hWnddlg,IDC_BUTTON_SETUPBLOCK);
Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄
查找标题已知的窗口句柄,遍历窗口控件   有了回调函数的概念及上面的例子,我们可以继续了。其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow. 其函数原形是: function FindWindow(lpClassName, lpWindowName: PChar): HWND;stdcall; lpClassName:窗口类名.如果只知道标题,可以为空.
获得窗口并枚举其子窗口
可以调用函数FindWindow(窗口类名,窗口标题)获得窗口的句柄,然后调用EnumChildWindows(父窗口,回调函数名,参数)来获得父窗口下的子窗口的句柄,代码实现如下 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include
qt 获取窗口句柄
HWND appwnd; appwnd = (HWND)w.winId(); QString ClassName("Qt5QWindowIcon"); QString AppName = QStringLiteral("GG"); LPCWSTR app = reinterpret_cast(ClassName.data()); LPCWSTR appCaption = reinterpret_
从子窗口中获取父窗口的句柄例子
HWND hTemp=::GetParent(this->GetSafeHwnd());//GetSafeHwnd()会返回当前窗口的句柄,GetParent(子句柄)这个函数将获得子句柄的父窗口的句柄 while(hTemp) { HWND hParent=hTemp; hTemp=::GetParent(hParent); if(!hTemp) { ::SendMessage(h
Delphi获取句柄并发送消息!
Delphi获取句柄并发送消息查找另外一个窗口的句柄: handle := FindWindow(nil,PChar(窗口的标题));//查到窗体句柄查找子窗体:childHandle := FindWindowEx(handle,0,子窗体类,子窗体标题); 另外有个枚举子窗体的API,EnumChildWindows(主创体句柄,@回调函数,用户参数);用这个函数需要自己写一个
WinPAI: FindWindow、FindWindowEx ---查找窗口
原文地址: http://www.cnblogs.com/del/archive/2008/02/28/1085432.html   FindWindow(   lpClassName,        {窗口的类名}   lpWindowName: PChar {窗口的标题} ): HWND;              {返回窗口的句柄; 失败返回 0} //FindWindowEx 比
在MFC类中,获得主窗口句柄
http://bbs.csdn.net/topics/390432031?page=1 句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息、处理程序):0。获取所在类窗口的句柄: this->m_hwnd 1。主窗口的句柄: 无论在主窗口类内,还是子窗口类内,获取主窗口句柄的方法: AfxGetMainWnd()->m_hWnd, 如:::SendMessage(AfxGe
Qt通过句柄操作外部窗口
之前很长时间内用的都是MFC,后来VC的多线程与内存泄露让我焦头烂额,牵扯东西太多,于是乎,转战qt了。 编程过程中,不可避免要操作外部窗口,MFC中操作窗口用的都是CWND::fromHandle(); qt中操作外部窗口与CWND对应的是QWindow类。 HWND hwndLogin=FindWindow(NULL,L"登录"); QWidget* widgetL
windows 下在一个进程中使用createprocess创建一个窗口进程,并获取这个窗口的HWND句柄
// Process.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include   #include DWORD g_dwProcessId = 0; HWND g_hWnd = NULL; BOOL   CALLBACK  EnumWindo
通过窗口句柄截获消息
//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------
查找某个进程拥有的所有窗口
#include #include #include #include #define WINDOW_TEXT_LENGTH 256 BOOL CALLBACK EnumChildWindowCallBack(HWND hWnd, LPARAM lParam) { DWORD dwPid = 0; GetWindowThreadProcessId(hWnd, &dwPi
win32 API窗口句柄的获得——我的经验
初次写文档,文笔不通畅的地方,以及理解错误之处望各位朋友多多指正!这篇文章是关于如何获取窗口句柄,以及有哪些函数可供使用的简单讨论!可适用于vc、bcb(其他的我没有试,估计可以),本人在bcb环境下试验。首先我会罗列出一些获取句柄的win32 api 函数,然后简单说说他们的用途!最后说说我是怎么理解和应用的。见笑了!可用的win32 api函数:1.HWND FindWin
怎样才能获得同一程序全部实例顶级窗口句柄
当一个含有窗口的程序只有一个运行实例的时候,可以用FindWindow函数或CWnd::FindWindow函数得到其顶级窗口句柄。但是当这个程序有多个运行实例同时运行时,FindWindow只能返回最后一个被激活的窗口句柄。怎样才能得到所有的运行实例呢(这样才可以像所有的实例发送消息么:)).这就要用到EnumWindows函数了。----------------------
枚举遍历所有子窗口句柄控件类型标题
为指定的父窗口枚举子窗口、按钮  很早就写过类似spy++和查看密码窗口的东西,一直想给这个小东西再加点特别的。前段时间对软件安装注册发生了兴趣,有些软件如果你不输入正确注册码,那该死的“下一步”按钮就一直disable。这次我就让spy++彻底spy到底,把那个注册用的按钮置亮,让我轻松进入“下一步”,呵呵…。   我的想法是光标移到指定的窗口上后,探测这个窗口上到底有多少按钮,如果有,就将它们
win32 获取窗口句柄的方法
win32 获取窗口句柄的方法   第一种方法是根据窗口句柄值获取窗口句柄 使用spy++获取指定窗口的窗口句柄值,因为句柄值是16进制数,所以前面加0x,然后进行强制转换为HWND类型。 HWND hWnd=(HWND)0x00280726;   第二种方法是使用FindWindow或者FindWindowEx根据窗口类名和窗口标题找到相应的窗口句柄 HWND FindWind
Delphi 关闭指定窗口
我在程序中想每隔30秒自动关闭指定窗口标题的窗口。如IE窗口,脚本提示错误窗口,上网时的下载工具提示等等  最简单的方法:procedure TForm1.Button1Click(Sender: TObject);varQQHWND:HWND;beginqqhwnd:=findwindow(nil,QQ用户登录);ShowWindow(QQHWND,sw_HIDE);   // 这里
易语言系列————————窗口_枚举所有子窗口(精易模块)
在易语言开发中,有时想直接从一个窗口中拿取 窗口下所有控件的信息,可以用window知道的api入手,但是精益模块有带有这个功能哦。    窗口_枚举所有子窗口()            三个参数:            一、欲寻找控件的窗口句柄            二、查询出来的所有子窗口句柄数组            三、查询的控件类名    对于前两个参数,相信大家都知道,第一个就是 窗口...
获取窗体句柄:通过窗体标题模糊查询
对于 HWND FindWindow(          LPCTSTR lpClassName,    LPCTSTR lpWindowName); lpWindowName必须和查询窗体标题完全相等情况下才可正确返回窗体句柄,比如若想查询窗体"无标题-记事本"CString strTitle = _T("无标题-记")FindWindow(NULL, (LPCTSTR)strTitle)则无法
MFC多文档修改主窗口和子窗口名字
主窗口修改在 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CMDIFrameWndEx::PreCreateWindow(cs) ) return FALSE; // TODO: 在此处通过修改 //  CREATESTRUCT cs 来修改窗口类或样式 m_strTitle = _T("点云");//m_str
相关热词 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎 c#窗体自动弹出子窗体 c# 连接sqlite