在 QT 中获取窗口 WId 列表

2023-12-03

我正在 QT 中编写一个库,它将截取任意外部窗口的屏幕截图。我知道如何使用截图QScreen::grabWindow(),但这需要作为参数WId,我想知道是否有办法获得列表WIds 表示屏幕和/或桌面上的所有窗口(或类似的东西,例如获取WId对于使用标题名称的特定窗口),通过 QT。我知道我可以通过依赖于平台的方式来做到这一点,例如EnumWindows在 Windows 中,但如果可能的话,我希望在 QT 中保持它的跨平台性。


这对于 Qt 来说是不可能的。如果您希望您的库独立于平台,则需要为您想要支持的每个平台编写代码。

要使该平台独立,您必须编写一个(公共)函数,在其中使用预处理器测试该平台#if:

#ifdef __unix__
    // call unix specific code
#elseif ...
    // other platforms
#else
#error Platform not supported!
#endif

对于unix特定的代码,您需要使用xlib,它以树的形式管理窗口。从下面的代码中,您将获得所有窗口,并且在X11中有很多不可见的窗口和您不认为它们是单独的窗口的窗口。因此,您肯定必须过滤结果,但这取决于您想要的窗口类型。

以此代码作为开始:

#include <X11/Xlib.h>

// Window is a type in Xlib.h
QList<Window> listXWindowsRecursive(Display *disp, Window w)
{
    Window root;
    Window parent;
    Window *children;
    unsigned int childrenCount;

    QList<Window> windows;
    if(XQueryTree(disp, w, &root, &parent, &children, &childrenCount))
    {
        for(unsigned int i = 0; i < childrenCount; ++i)
        {
            windows << children[i];
            windows << listXWindowsRecursive(disp, children[i]);
        }
        XFree(children);
    }
    return windows;
}

Display *disp = XOpenDisplay(":0.0");
Window rootWin = XDefaultRootWindow(disp);
QList<Window> windows = listXWindowsRecursive(disp, rootWin);

foreach(Window win, windows)
{
    // Enumerate through all windows
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 QT 中获取窗口 WId 列表 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • Selenium Webdriver - 在屏幕截图中捕获 URL

    据我所知 屏幕截图功能基本上就像绘制 DOM 一样 由于 URL 不是 DOM 的一部分 因此屏幕截图不包含 URL 但是有什么解决方法可以捕获 URL 作为屏幕截图的一部分吗 目前 网络驱动程序无法实现这一点 您可以遵循以下任何一种方法
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Phonegap:源 URL 不在白名单中

    我正在尝试让 PhoneGap 2 4 0 FileTransfer 在 Android 4 2 上运行 我收到一条 Logcat 警告消息 The Source URL is not in white list http api etc
  • 使用动态文件在 EC2 上挂载 S3 (s3fs) - 持久公共权限

    使用 S3FS 和 FUSE 将 S3 存储桶挂载到 AWS EC2 实例时 我遇到了一个问题 我的 S3 文件正在更新 但新文件没有采用适当的权限 新文件拥有的 ACL 权限是 而不是 rw r r 我已通过以下方式确保铲斗已正确安装 s
  • 强制 Play 框架仅在本地主机上侦听

    如何强制 Play Framework 仅在本地主机上侦听我希望该剧能够在 localhost 9000 上监听 而不是在 0 0 0 0 9000 上监听所以外部IP无法访问我尝试使用http 地址 127 0 0 1 在 applica
  • JSSE 是否使用 PrivateKeyEntry 中的证书作为信任锚?

    如果密钥库包含一个或多个PrivateKeyEntry被指定为信任存储 JSSE 是否会根据每个条目中的最终实体证书创建信任锚 换句话说 拥有一个证书就足够了吗 PrivateKeyEntry如果我们有一个包含可信条目和私有条目的密钥库 或
  • 将 R S3 普通函数转换为泛型函数

    仅供参考 看起来这个问题已经有一个LISP 等效项 最近我想为 R 基本函数创建一个数据框扩展setdiff并认为通用会很好 以下方法可以工作 但很笨拙 export setdiff default setdiff default lt s
  • 使用不稳定库功能“iter_nth_back”的 Rust 包

    我有一个我不太了解的 Rust 应用程序 我正在从我正在开发的 Python 程序中调用它 我没有更改 Rust 源代码中的任何内容 但这两个项目的构建过程只是停止工作并出现如下错误 several similar errors error
  • 为什么嵌套循环的顺序之间存在性能差异?

    我有一个循环遍历两个列表的过程 一个相对较大 而另一个则明显较小 Example larger list list range 15000 smaller list list range 2500 for ll in larger list
  • macOS 应用程序中 NSTableView 行中具有可变高度的可编辑 NSTextFields

    Xcode 10 1 Swift 4 2 macOS 10 14 2 我正在尝试为 macOS 制作一个简单的待办事项列表应用程序 其中有一系列NSTableView行 每行里面都有一个NSTextField 每个字段都是一个待办事项 我想
  • 如何将子节点添加到特定节点

    这是我的起始 xml
  • 如何编写 sails 函数以在控制器中使用?

    我有一个关于 sails js 的问题 How can I write sails function on model To use in Controler like 验证前 fn 值 cb 创建之前 fn 值 cb 创建后 fn 新插入
  • 清除使用jquery从数组中删除的图像预览文件

    我花了一个多月的时间试图解决这个问题 在预览器上单击 x 后 我无法将图像从数组中删除 http jsfiddle net ERZVC 2 我尝试使用拼接失败了 list on click remove img preview functi
  • 是否可以在 Telosys 模板中调用专门创建的函数?

    我使用特洛西斯 https www telosys org 生成Python源代码并且运行良好 但我有一个特定的需求 可以通过调用特定的转换函数来解决 是否可以创建特定函数并在 Telosys 模板中调用它 例如 myFunction ab
  • 这种安装 COM+ 的方法有效吗?

    我一直在尝试使用WiX 3 7安装一个COM 组件 我一直在使用在 StackOverflow 上找到的几个 WiX 代码片段 虽然我可以生成 MSI 但当我安装该 msi 时 它会失败并出现如下错误 RegisterComPlusAsse
  • 如何在 Access SQL 中的列别名中使用表名?

    在 MS Access 中 我的表是 Exam id name 我的查询是 select Exam id as Exam id Exam name as Exam name from Exam 现在 当我执行此查询时 发生了此错误 Exam
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 在结构中使用 typedef 来命名和索引文本命令

    我正在使用一个简单的命令行应用程序 它接受 ASCII 文本并将其解释为命令 我尝试通过以下示例最小化此应用程序中的冗余http gcc gnu org onlinedocs cpp Concatenation html 例如 考虑一个解释
  • 我什么时候在代码中需要多个 TraceSource?

    如果一个应用程序将其所有活动数据写入一个日志文件 那么拥有多个 TraceSource 是否有任何用处 我只是对代码中需要多个 TraceSource 的用例感到好奇 请参阅其他问题的这些答案 作为使用 TraceSources 的良好起点
  • Javascript 函数 - 将字符串参数转换为运算符

    如果我的问题不清楚 不知道如何措辞 请道歉 我正在尝试创建一个接受两个数字和一个包含运算符 例如 的字符串的函数 我已在字符串上使用 valueOf 来提取运算符 但是 num1 和 num2 参数似乎并未计算为传递的数字参数 为什么会发生
  • 使用 UNION 子查询的查询需要很长时间

    我在某些依赖于子查询的查询上遇到了一个奇怪的问题 它们运行得快如闪电 直到我在子查询中使用 UNION 语句 然后他们就无休无止地跑 我10分钟后就给了 我现在描述的场景不是我一开始的场景 但我认为它消除了很多可能的问题 但却产生了同样的问
  • 在 QT 中获取窗口 WId 列表

    我正在 QT 中编写一个库 它将截取任意外部窗口的屏幕截图 我知道如何使用截图QScreen grabWindow 但这需要作为参数WId 我想知道是否有办法获得列表WIds 表示屏幕和 或桌面上的所有窗口 或类似的东西 例如获取WId对于