首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让EnumWindows列出所有窗口?

要使用EnumWindows函数列出所有窗口,您需要遵循以下步骤:

  1. 定义一个回调函数(Callback Function):

EnumWindows函数需要一个回调函数作为参数,该回调函数在枚举每个窗口时被调用。回调函数的原型如下:

代码语言:c++
复制
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

其中,hwnd参数表示当前枚举的窗口句柄,lParam参数是应用程序提供的任意值,用于传递额外的数据。

  1. 实现回调函数:

在回调函数中,您可以获取窗口的标题、类名等信息,并将它们存储在一个数据结构中,例如std::vector。

代码语言:c++
复制
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
    // 获取窗口标题
    char title[256];
    GetWindowTextA(hwnd, title, sizeof(title));

    // 获取窗口类名
    char className[256];
    GetClassNameA(hwnd, className, sizeof(className));

    // 将窗口信息存储在数据结构中
    std::vector<HWND>* windows = reinterpret_cast<std::vector<HWND>*>(lParam);
    windows->push_back(hwnd);

    return TRUE; // 继续枚举下一个窗口
}
  1. 调用EnumWindows函数:

在主函数中,您可以调用EnumWindows函数,并传递回调函数的地址和一个指向数据结构的指针作为参数。

代码语言:c++
复制
int main() {
    std::vector<HWND> windows;
    EnumWindows(EnumWindowsProc, reinterpret_cast<LPARAM>(&windows));

    // 输出所有窗口句柄
    for (HWND hwnd : windows) {
        std::cout << "Window handle: " << hwnd<< std::endl;
    }

    return 0;
}

这样,您就可以使用EnumWindows函数列出所有窗口了。请注意,这个示例仅列出了窗口句柄,您可以根据需要获取其他窗口属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows窗口对象的附加数据

Windows编程中,每一个窗口对象(HWND)都是一个窗口类(WNDCLASSEX)的实例。每个窗口类实例出来的窗口对象都按同样的方式进行处理,共享相同的回调函数,我们也可以使用窗口子类化技术对某个窗口对象做特定的处理。有时候在一些MDI程序中希望每个窗口对象能保留一些不同于其他窗口的特定数据,这样就可以实现窗口对象有相同的行为但有不同的特性。要使窗口对象有不同的附加特性,只要将那些附加特性与窗口句柄关联起来就可以了,也就是将每个窗口不同的附加数据与窗口句柄建立一种映射关系,这样通过这种映射关系就可以从句柄中获取相关联的附加的数据,然后对其进行操作。Windows系统中提供了如下的四种方法:

02

Windows窗口类

Windows编程中,对所有的GUI组件和控件进行了分类,每种类型的实例对象都具有不同的特性,这些特性包括UI外观以及事件的处理和响应的方法。就和面向对象技术中的类和实例对象一样,Windows中也提供了窗口类和窗口实例的概念,在创建一个窗口对象是必须要指定对应的窗口类名称,所有的窗口类必须要先注册到系统中才能进行实例化创建。系统内部默认注册了一些窗口类,比如按钮,编辑框这些窗口类等等。本文所要介绍的就是那些针对窗口类进行操作的API。一个窗口类其实就是定义了这种窗口实例的外观显示的样式、光标在窗口上移动时的样式、以及图标样式、背景绘制的画刷的类型、菜单、以及对应的UI事件处理函数等等。为了唯一的表征一个窗口类,还需要为窗口类指定一个唯一的字符串名称。下面的结构体就是用来描述一个窗口类所应该具有的数据结构:

02

duilib基本框架

最近我一个同学在项目中使用到了duilib框架,但是之前并没有接触过,他与我讨论这方面的内容,看着官方给出的精美的例子,我对这个库有了很大的兴趣,我自己也是初学这个东东,我在网上花了不少时间来找相关的资料,但是找到的不多,官方给的文档又不全面,但是我还是找到了一些博主贡献的优秀的博文,现在我是通过博文上的讲解加上自己查看源代码的一些心得,正在艰难的前行。现在正在看的是博主Alberl在博客园中的duilib基础教程中的内容,下面的代码都是在他博客中给出代码的基础上做了一点小小的修改。点击这里跳转到对应的博客,以及博主夜雨無聲的博客,博客地址

01
领券