https://blog.csdn.net/u012372584/article/details/53735242
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012372584/article/details/53735242

借鉴内容来自VC++驿站:VC驿站

①、使用 GetWindow 进行窗口枚举:

This function retrieves the handle to a window that has the specified relationship to the specified window.

HWND GetWindow( 
  HWND hWnd, 
  UINT uCmd 
);

Parameters:
hWnd 
[in] Handle to a window. The window handle retrieved is relative to this window, based on the value of the uCmd parameter. 
uCmd 
[in] Specifies the relationship between the specified window and the window whose handle is to be retrieved.

TCHAR titleText[MAX_PATH] = {0};
HWND nHwnd = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
while(nHwnd != NULL) {
::GetWindowText(nHwnd, titleText, MAX_PATH);
if (_tcslen(titleText) > 0) MessageBox(titleText);

nHwnd = ::GetWindow(nHwnd, GW_HWNDNEXT);
}

②、使用 FindWindowEx 进行窗口枚举:

1)This function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.

HWND FindWindow( 
  LPCTSTR lpClassName, 
  LPCTSTR lpWindowName 
);

Parameters:
lpClassName 
[in] Long pointer to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit
value, must be placed in the low-order word of lpClassName; the high-order word must be zero. 
lpWindowName 
[in] Long pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.

2)The FindWindowEx function retrieves a handle to a window whose class name and window name match the specified strings. The function searches child windows, beginning with the one following the specified child window. This function does not perform a case-sensitive
search. 
Syntax

HWND FindWindowEx(          HWND hwndParent,
    HWND hwndChildAfter,
    LPCTSTR lpszClass,
    LPCTSTR lpszWindow
);

Parameters:
hwndParent
[in] Handle to the parent window whose child windows are to be searched. 
If hwndParent is NULL, the function uses the desktop window as the parent window. The function searches among windows that are child windows of the desktop. 
Microsoft Windows 2000 and Windows XP: If hwndParent is HWND_MESSAGE, the function searches all message-only windows.

hwndChildAfter
[in] Handle to a child window. The search begins with the next child window in the Z order. The child window must be a direct child window of hwndParent, not just a descendant window. 
If hwndChildAfter is NULL, the search begins with the first child window of hwndParent. 
Note that if both hwndParent and hwndChildAfter are NULL, the function searches all top-level and message-only windows.

lpszClass
[in] 
Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be placed in the low-order word of lpszClass; the high-order word must be zero.
If lpszClass is a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names, or it can be MAKEINTATOM(0x800). In this latter case, 0x8000 is the
atom for a menu class. For more information, see the Remarks section of this topic.

lpszWindow
[in] Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.

TCHAR titleText[MAX_PATH] = {0};
HWND nHwnd = ::FindWindow(NULL, NULL);
while(nHwnd != NULL) {
::GetWindowText(nHwnd, titleText, MAX_PATH);
if (_tcslen(titleText) > 0) MessageBox(titleText);

nHwnd = ::FindWindowEx(0, nHwnd, NULL, NULL);
}

③、使用 EnumWindows 进行窗口枚举:

This function enumerates all top-level windows on the screen by passing the handle to each window, in turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.

BOOL EnumWindows( 
  WNDENUMPROC lpEnumFunc, 
  LPARAM lParam 
);

Parameters:
lpEnumFunc 
[in] Long pointer to an application-defined callback function. For more information, see EnumWindowsProc. 
lParam 
[in, out] Specifies an application-defined value to be passed to the callback function.

EnumWindows(EnumWindowsProc, NULL);
……
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
TCHAR titleText[MAX_PATH] = {0};
::GetWindowText(hwnd, titleText, MAX_PATH);
if (_tcslen(titleText) > 0) AfxMessageBox(titleText);

return TRUE;
}

④、使用 EnumChildWindows 进行子窗口的枚举:

EnumChildWindows 照比 EnumWindows 只是多了一个指定父窗口的窗口句柄的参数.

The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the handle to each child window, in turn, to an application-defined callback function. EnumChildWindows continues until the last child window is
enumerated or the callback function returns FALSE.
Syntax

BOOL EnumChildWindows(          HWND hWndParent,
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
);

Parameters:
hWndParent
[in] 
Handle to the parent window whose child windows are to be enumerated. If this parameter is NULL, this function is equivalent to EnumWindows.
Windows 95/98/Me: hWndParent cannot be NULL.

lpEnumFunc
[in] Pointer to an application-defined callback function. For more information, see EnumChildProc. 
lParam
[in] Specifies an application-defined value to be passed to the callback function. 
Return Value

⑤、使用 FindWindow 进行窗口的查找:
HWND hCalc = ::FindWindow(_T("SciCalc"), _T("计算器"));
if (hCalc){
::SetWindowText(hCalc, _T("VC驿站 专用计算器!"));
}

⑥、使用 FindWindowEx 进行子窗口的查找:
HWND hCalc = ::FindWindow(_T("SciCalc"), _T("计算器"));
if (hCalc){
::SetWindowText(hCalc, _T("VC驿站 专用计算器!"));
HWND hEdit = ::FindWindowEx(hCalc, NULL, _T("Edit"), NULL);
::SetWindowText(hEdit, _T("1234567890"));
//::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)_T("1234567890"));
}

⑦、鉴于 FindWindowEx 找子控件的不确定性,
可以使用 GetDlgItem 来获取对话框内部的子控件窗口句柄:
HWND hEdit = ::GetDlgItem(hCalc, 0x193);

jpg改rar 

VC++进行窗口枚举的更多相关文章

  1. VC无窗口控制台程序

    VC无窗口控制台程序 #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartu ...

  2. VC++实现窗口置顶

    最近在跟着Visual C++网络编程开发与实战视频教程做HttpSourceViewer这个MFC项目时,可以看我Github上的项目HttpSourceViewer,目前基本实现了所有功能,就是关 ...

  3. VC++ 限制窗口的大小范围的方法

    响应WM_GETMAXMININFO  的消息 处理之 void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { // TODO: Add y ...

  4. VC++ 实现窗口抖动

    RECT rect; int x, y, nWidth, nHeight; GetWindowRect(&rect); x = rect.left; y = rect.top; nWidth ...

  5. vc 使窗口置顶 在最前面

    bool SetWindowTop(CWnd* pWnd){ if(!pWnd) {   return false; } if(pWnd->GetExStyle()&WS_EX_TOPM ...

  6. vc设置窗口透明

    ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, ::GetWindowLongPtr(GetSafeHwnd(), GWL_EXSTYLE) | WS_EX_L ...

  7. VC中窗口ID,句柄,指针三者相互转换函数【转】

    ID--HANDLE--HWND三者之间的互相转换id->句柄        hWnd = ::GetDlgItem(hParentWnd,id);id->指针        CWnd:: ...

  8. 枚举子窗口EnumChildWindows()的应用

    1.EnumChildWindows()函数的作用枚举子窗口(按顺序调用回调函数,并将子窗口的句柄传递给了回调函数).函数原型: BOOL WINAPI EnumChildWindows( HWND ...

  9. VC++的窗口句柄和窗口ID

    原文地址:VC++的窗口句柄和窗口ID作者:放放 句柄是窗口资源的标识,它标识资源在系统中所占用的内存块,应用程序通过窗口句柄对窗口进行操作.除了窗口句柄之外,任何一种资源都有它自己的句柄,比如光标句 ...

随机推荐

  1. 高通 fastboot 显示

    需要在fastboot里面添加功能用于保存,记录一下fastboot显示的过程. android O新添加了选项,如下 platform/msm_shared/rules.mk ifeq ($(ENA ...

  2. Java如何处理空堆栈异常?

    在Java编程中,如何处理空堆栈异常? 本例展示了如何使用Date类的System.currentTimeMillis()方法和Stack类的s.empty(),s.pop()方法来处理空堆栈异常. ...

  3. Java如何显示线程状态?

    在Java编程中,如何显示线程状态? 以下示例演示如何使用Thread类的isAlive()和getStatus()方法显示线程的不同状态. package com.yiibai; class MyT ...

  4. Docker for Mac 安装及Mysql安装使用

    启动 mysql 镜像 docker run -d -p 127.0.0.1:3306:3306 –name mysql -v /Users/flyrPc/docker/mysql/data:/var ...

  5. Unity 各个组件参数总结

    今天在蛮牛教育上学习了NGUI的课程下面给大家总结了一些小知识点希望对大家有帮助UICamera-可以添加到任何相机,包含事件系统.UICamera是每个UI的重要组成部分.它负责发送Camera中所 ...

  6. CI框架 -- 核心文件 之 Benchmark.php

    Benchmark.php文件中定义的CI_Benchmark类可以让你标记点,并计算它们之间的时间差.还可以显示内存消耗. Benchmarking类库,它是被系统自动被加载的,不需要手工加载 cl ...

  7. Java入门与基础算法班 - 课程大纲

    第1章 零基础转CS,如何准备? · 转专业找CS工作怎么办? · 零基础如何在最短时间内拿到offer? · 如何写好简历? · IT技术面试内容有哪些? · JAVA语言怎么入门? 第2章 数组与 ...

  8. 由SecureCRT命令行快捷键谈学习思想

    由学习linux SecureCRT命令行常用快捷键开始谈起! 1)老男孩说,抓重点(重点非难点) 任何一个领域.学科,任何一个职位.工作,都有学不完的知识,优秀的学生总能抓住重点去学习,如果泛泛的去 ...

  9. 代码记录——phase16,block36(修正后)

    加入边缘判定,<2则加2. if (x_upleft<2) x_upleft=x_upleft+2; if (y_upleft<2) y_upleft=y_upleft+2; HRE ...

  10. QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)

    本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...