使用Qt4捕获多个屏幕桌面图像

2024-01-08

我正在用 C++ 在 Qt4 中编写屏幕捕获应用程序。我在双屏上调整时遇到问题。我无法使用第二个屏幕获取图像。我尝试了一个 C# 应用程序,它将抓取一个图像中的所有桌面,我可以从那里提取每个屏幕桌面图像。 这是c#代码

    using System;
using System.Drawing;
using System.Runtime.InteropServices;

public class TestGrab
{
  [STAThread]
  static void Main(string[] args)
  {
    IntPtr hDC = WindowsNative.GetDC(WindowsNative.GetDesktopWindow());
    IntPtr hBitmap = WindowsNative.GetCurrentObject(hDC,
    WindowsNative.OBJ_BITMAP);
    System.Drawing.Bitmap imageDesktop = System.Drawing.Image.FromHbitmap(
    hBitmap);
    imageDesktop.Save(@"c:\zzzzdesktop.png");
  }
}

public class WindowsNative
{
  [DllImport("user32.dll")]
  public static extern IntPtr GetDesktopWindow();

  [DllImport("user32.dll")]
  public static extern IntPtr GetDC(IntPtr ptr);

  public const int OBJ_BITMAP = 7;
  [DllImport("gdi32.dll")]
  public static extern IntPtr GetCurrentObject(IntPtr hdc, uint
  uiObjectType);
}

Qt代码更小,我还测试了桌面的本机窗口句柄是否与Qt Desktop0>winId()不同,但它们是相等的

QPixmap CaptureWinDesktop()
{
    WId desktop=GetDesktopWindow();
    WId desktop2=QApplication::desktop()->winId();
    if(desktop!=desktop2)
    {
        qDebug("sunt fdiferite WId");
    }
     QPixmap entireDesktop= QPixmap::grabWindow(desktop);
     return entireDesktop;
}

我不确定这是否是 Qt 中的错误或功能,使用相同的窗口句柄仅重试第一个桌面,而实际上桌面是由 2 个屏幕组成的中继。一种想法是使用本机 Windows 调用并将图像保存在临时文件中,然后从那里加载 QPixmap,但是在没有 MFC 的情况下将 HBITMAP 保存在 C++ 文件中并不简单。 结论:您认为 Qt 中的错误是什么?知道如何解决它(没有 MFC )


你可以用以下方法计算屏幕数量QDesktopWidget::screenCount()(Qt 4.6) 然后遍历所有屏幕并执行QPixmap::grabWindow(...)

关于“由 2 个屏幕组成的桌面”。这完全取决于 2 个屏幕是否是虚拟的(所有屏幕均视为一个屏幕)。

@Frerich Raabe:它适用于 Windows 7,因为我使用类似的代码来执行屏幕抓取。

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

使用Qt4捕获多个屏幕桌面图像 的相关文章

  • C++:头文件中全局函数的多重定义错误

    该函数是全局的 在头文件中定义 暂时地我想把它留在那里 头文件还构成一个具有内联函数的特定类 其中一个函数调用this全局函数 源文件不包含任何有问题的全局函数 有关错误原因的任何提示吗 如果有人感兴趣的话我可以发布代码 mainwindo
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod
  • 如何在qt中进行异步文件io?

    我想知道如何在qt中实现异步文件io 这在普通的 qt 中是否可以实现 或者有人需要使用另一个库 例如 libuv 来实现这样的事情 我正在查看 QDataStream 但即使它是一个 流 它也不是非阻塞的 我想一种解决方案是制作一个在内部
  • 无法在 QGLWidget 中设置所需的 OpenGL 版本

    我正在尝试在 Qt 4 8 2 中使用 QGLWidget 我注意到 QGLWidget 创建的默认上下文不显示 OpenGL 3 1 以上的任何输出 Qt wiki 有一个教程 http qt project org wiki How t
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • 获取 QPushButton 在 2D 数组 QPushButton 上的索引

    我有一个二维数组QPushButton 当用户单击按钮时如何获取按钮的索引 例如当用户单击按钮时a 2 3 它会显示 2 3 该示例如下所示 Qt 4 5 使用对象名称 您可以为按钮指定唯一的对象名称 理想情况下 名称应该是有效的 C 标识
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 仅在内部/外部抚摸路径?

    Given a QPainterPath http qt project org doc qt 4 8 qpainterpath html如何仅在路径的内侧或外侧边缘 或非闭合路径的左侧或右侧 描边路径 QPainter strokePat
  • 如何使用 Qt DOM 通过此语法获取 xml 属性

    我正在使用 Qt DOM XML 解析器 并且遇到了如下属性定义的问题
  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • 清除pyqt中布局中的所有小部件

    有没有办法清除 删除 布局中的所有小部件 self plot layout QtGui QGridLayout self plot layout setGeometry QtCore QRect 200 200 200 200 self r
  • 如何去除QWizard中的水平线?

    我正在研究一个样式表QWizard我想删除按钮上方的水平线 我尝试递归浏览所有小部件并将其边框设置为无 但似乎没有任何小部件具有此边框 这是我的代码 可以找到完整的可构建示例here https gist github com ardeid
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • PyQt4 QPalette 不工作

    btn QtGui QPushButton Button self palettes btn palette palettes setColor btn backgroundRole QtCore Qt green btn setPalet
  • 如何doxygen注释Qt属性?

    我想将 Doxygen 注释附加到我的 Q PROPERTY 例如 song h class Song public QObject Q OBJECT private Q PROPERTY QString title READ title
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • 无法运行 Qt 应用程序:找不到版本“Qt_5”

    我运行 Ubuntu 16 04 LTS 我的问题是我无法运行可以编译的 Qt5 应用程序 这是我尝试运行它时得到的结果 home user Desktop sconfig dist Release GNU Linux SCongif us

随机推荐

  • Android 在应用程序安装后运行 Gradle 任务

    需要 Gradle 任务方面的帮助 我需要在安装应用程序后运行一些 taskX 在 installDebug 任务之后 我也尝试过像这样完成任务 task taskX type Exec dependsOn installDebug com
  • 解决 Sympy 中的不平等问题

    我试图解决 sympy 中的以下不等式 10000 x 1 lt 0 所以我发出了命令 solve poly inequality Poly 10000 x 1 lt 但是 我得到了 Interval open oo 1 10000 然而
  • Rails 清除 Heroku 上的缓存

    如何清除 Heroku 上的缓存 我试过了heroku run rails c Rails cache clear并收到以下错误 Errno ENOENT No such file or directory dir initialize a
  • Laravel 4 - 选择相关模型

    我有下表 Schema create jokes categories function Blueprint table table gt increments id table gt string name table gt string
  • C# 中的螺旋算法 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我怎样才能像这样填充数组 1 2 3 4 5 6 7 8 20 21 22 23 24 9 19 30 31 32 25 10 18 29
  • Angular2如何在使用路由的组件之间更改时再次加载javascript

    我导入了一些javascript 并将它们放入 angular cli json 代码如下 apps root src outDir dist assets assets index index html main main ts test
  • AngularJs 中 ng-model 的 Getter 和 setter 支持

    我试图通过实现一个指令来获得对 ng model 的 getter setter 支持 该指令将负责从视图 模型获取和设置值 我已经快到了 但我最终陷入了无限的 digest 循环 这个想法是设置 ng model someFieldToS
  • 是否有像 `fromNewtype . F 。到新类型`?

    通过引入类型安全性越多 这种模式就越频繁地出现newtype是要投射一个价值 或几个值 to a newtype包装器 做一些操作 然后收回投影 一个普遍存在的例子是Sum and Product幺半群 x y getSum Sum x m
  • 在 Azure 数据工厂副本中使用追加 blob 是否有任何解决方法?

    我不希望 ADF 管道中的复制数据活动覆盖 Blob 文件 而是将新数据附加到其中 但 ADF 仅支持 Blockblob 那么有没有办法将数据追加到现有文件中 您可以使用网络活动 https learn microsoft com en
  • 标题/标头位于文章标签之外的布局的最佳 HTML5 结构

    我有一个布局 可以让我选择 将侧边栏包含在文章标签中 即使它不是特定于文章的 标题位于文章标签之外 目前 我的标题位于文章标签之外 但验证器告诉我 itemprop headline 不属于任何项目 构建这个结构的最佳方法是什么 有没有fo
  • 如何在 C# 中使用 HttpClient 读取 webapi 响应

    我开发了一个小型 webapi 它有一些操作并返回我的自定义类 名为Response The Response class public class Response bool IsSuccess false string Message
  • Python Kolmogorov-Smirnov 拟合优度检验中的 p 值非常低

    我有一组数据 并通过对数正态分布拟合相应的直方图 我首先计算对数正态函数的最佳参数 然后绘制直方图和对数正态函数 这给出了相当好的结果 import scipy as sp import numpy as np import matplot
  • 组合多个 Node.js Web 应用程序

    我正在努力找出实现这一目标的最佳方法 本质上 我有大约 6 个网站需要上网 但目前它们的流量几乎为零 因此为了节省资金 它们需要部署在同一台服务器上 理想情况下我们将使用 AWS 的 Elastic BeanStalk 有没有一种方法可以像
  • WEB API Action Method 的返回类型应该是什么?

    我正在使用 NET Core 开发 ASP NET Web API 该Web API将主要由UI应用程序访问 UI将使用ASP NET Core MVC开发 但将来API也可能被其他应用程序访问 在我的 WEB API 中 所有方法都是异步
  • Socket.io 发出进度检查

    我使用 Socket io 来上传文件 它适用于以下架构 客户端 从输入读取文件并将其编码为 Base64 并压缩 客户端 发出 Socket io 事件 上传 包括压 缩文件作为数据片段 服务器 监听 上传 事件 解压缩并解码文件并保存
  • PDOException 找不到驱动程序

    我正在使用 symfony 当我在控制台中输入以下内容时 php app console doctrine schema create 我有接下来的错误 学说 DBAL 异常 DriverException 驱动程序出现异常 找不到驱动程序
  • 使用多个分隔符并保留每个分隔符有效地分割字符串?

    我需要使用每个字符来分割数据字符串string punctuation and string whitespace作为分隔符 此外 我需要将分隔符保留在输出列表中 位于它们在字符串中分隔的项目之间 例如 Now is the winter
  • 如何显示接口方法的所有实现实例?

    在我的项目中 使用了大量的接口类 我在阅读和理解代码时遇到困难 因为浏览代码的定义 通过选择方法名称并按 F12 或右键单击 转到定义 只会引导我进入界面 Visual Studio 2010 中是否有一种方法 内置或插件 可以列出接口方法
  • Vagrant:缺少文件 id_rsa

    我正在使用带有 homestead 的 Windows 并且尝试在命令行上输入 vagrant up 但出现此错误 C www Homestead scripts homestead rb 106 inread No such file o
  • 使用Qt4捕获多个屏幕桌面图像

    我正在用 C 在 Qt4 中编写屏幕捕获应用程序 我在双屏上调整时遇到问题 我无法使用第二个屏幕获取图像 我尝试了一个 C 应用程序 它将抓取一个图像中的所有桌面 我可以从那里提取每个屏幕桌面图像 这是c 代码 using System u