如何获取 win32 API 中所有屏幕的尺寸(RECT)?

2023-11-25

我正在为测试团队编写一份应用程序。该应用程序的作用是让您截取屏幕任何部分的屏幕截图(然后将其连同注释一起上传到测试团队服务器)。

截屏涉及选择屏幕上要截屏的区域。为此,我创建了一个半透明窗口并将其覆盖在整个屏幕上。我目前正在使用GetDesktopWindow() and GetWindowRect()获取屏幕的尺寸,但这在多屏幕环境中不起作用。

如何将窗口覆盖在所有可能的屏幕上?

屏幕配置可能非常奇特,例如:

     [LCD]
[LCD][LCD][LCD]

(4 个液晶屏 - 1 个在顶部,3 个在底部)

Or

[LCD]     [LCD]
[LCD][LCD][LCD]
[LCD]     [LCD]

(7 个液晶屏 - 3 个在右侧,3 个在左侧,1 个在中间)。

Etc.

有谁知道如何将 1 个窗口覆盖所有屏幕?我想知道第一个奇特示例中的尺寸会是什么样子,当顶行左侧和右侧没有屏幕时?

也许我应该为每个 LCD 屏幕创建一个覆盖窗口?

有任何想法吗?


您可以使用EnumDisplayMonitors为此功能。这是一个小类,它自动构建系统中所有监视器的向量以及它们的并集。

struct MonitorRects
{
    std::vector<RECT>   rcMonitors;
    RECT                rcCombined;

    static BOOL CALLBACK MonitorEnum(HMONITOR hMon,HDC hdc,LPRECT lprcMonitor,LPARAM pData)
    {
        MonitorRects* pThis = reinterpret_cast<MonitorRects*>(pData);
        pThis->rcMonitors.push_back(*lprcMonitor);
        UnionRect(&pThis->rcCombined, &pThis->rcCombined, lprcMonitor);
        return TRUE;
    }

    MonitorRects()
    {
        SetRectEmpty(&rcCombined);
        EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this);
    }
};

如果您只是使用以下命令创建一个大窗口rcCombined矩形,它将覆盖所有屏幕,并且“丢失”的位将被系统自动剪掉。

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

如何获取 win32 API 中所有屏幕的尺寸(RECT)? 的相关文章

  • C++中最大化窗口时的问题

    我的程序需要任意最大化当前桌面上的任何窗口 我通过调用来实现这一点ShowWindow hWnd SW MAXIMIZE 其中 hWnd 是HWND我想要最大化的窗口 当该行代码执行时 相关窗口 此处为记事本 如下所示 一切看起来都很好 除
  • 是否可以编写一个在另一个 Windows 应用程序中选择文本时收到通知的 Windows 应用程序?

    我很好奇是否可以编写一个程序来监视我的文本选择 一种可能的用途是编写一个与编辑器 IDE 无关的代码格式化程序 应用程序 服务 P 启动并以某种方式挂接到窗口中 以便在任何窗口中选择文本时收到通知 启动其他一些应用程序 A 用户选择 A 中
  • 读取 .ini 文件 vb.net?

    我有一个具有读取 ini 文件功能的项目 我无法显示我想要的 ini 文件的内容 我的代码读取 ini 文件 Public Function GetSettingItem ByVal File As String ByVal Identif
  • 发送和接收 Windows 消息

    Windows 消息似乎是通知 Windows 操作系统上的应用程序的好方法 它实际上运作良好 但我想到了几个问题 How to指定结构化数据lparamSendMessage 例程 就像许多消息代码一样 我的意思是 参数当然是一个指针 但
  • 如何使用本机 C++ 检查进程是否在 Windows 7 中具有提升的权限?

    如何检查进程在 Windows 7 中是否具有提升的权限 使用本机 C 而不是 C C net 我有时一直在寻找答案 但我只能找到使用 NET 框架的答案 最简单的方法是调用 IsUserAnAdmin 函数 如果您需要更高的精度 您也可以
  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • 处理具有不同缩放/分辨率的所有 iPhone 中的 UI [重复]

    这个问题在这里已经有答案了 在 iOS 中处理 iPhone 4 iPhone 5 iPhone 6 iPhone 6 UI 屏幕的最佳方法是什么 iPhone 6 的尺寸 3 倍缩放 坐标空间 414 x 736 像素 iPhone 6
  • 检测 C++/Win32 中的进程崩溃

    我正在开发一个包含 2 个程序的软件 Qt Main exe OpenGL Game exe 我们一开始总是使用 Qt Main exe 当我们点击 开始游戏 按钮时 我们执行OpenGL Game exe 这样做没问题 问题是 有时我们的
  • 在 C++ 应用程序中显示/隐藏桌面图标

    右键单击桌面 取消选中 视图 gt 显示桌面图标 桌面上的所有图标都会消失 是否可以从 C 应用程序显示 隐藏桌面图标 你有c 代码的例子吗 预先非常感谢您的任何建议 SHGetSet设置 http msdn microsoft com e
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 简单的 C++ 线程

    我正在尝试在 C Win32 中创建一个线程来运行一个简单的方法 我是 C 线程的新手 但对 C 中的线程非常熟悉 这是我想做的一些伪代码 static void MyMethod int data RunStuff data void R
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • 为什么 PathFileExists() 不起作用?

    我想验证文件是否存在 经过一番搜索后 我认为 PathFileExists 可能适合这项工作 但是 下面的代码总是显示该文件不存在 为了确保该文件确实存在 我选择cmd exe的完整路径作为测试文件路径 我使用的是 Windows 7 x6
  • Java Toolkit 获取第二个屏幕尺寸

    我的计算机上插入了两个屏幕 想知道 JFrame 或 Toolkit 中是否有方法可以检测窗口位于哪个屏幕上 我有这个代码 java awt Toolkit getDefaultToolkit getScreenSize 它获取主屏幕的屏幕
  • 在按钮背景上拉伸/收缩时,位图会失去质量

    简介及相关信息 我有一个所有者绘制的静态控件 它应该在渐变背景上有位图 静态控制尺寸不固定 它们是在创建父窗口期间计算的 我从资源文件加载背景颜色为 RGB 255 163 94 的位图 Using TransparentBlt RGB 2
  • 为什么 Windows 只允许一个应用程序访问网络摄像头? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在尝试用 C 制作一个示例网络摄像头应用程序 我发现该应用程序无法同时运行 Skype 或 Oovoo 或任何其他应用程序运行 反之亦然 为什么
  • 有没有办法使用 win API 获取 HRESULT 值的字符串表示形式?

    win API 中是否有函数可用于提取 HRESULT 值的字符串表示形式 问题是 MSDN 中并未记录所有返回值 例如执行默认应用程序域 http msdn microsoft com en us library ms164411 asp
  • 使用 Windows (XP+) api 发送(串行)中断

    有没有比 setcommbreak delay clearcommbreak 序列更好的方法来发送串行中断 我必须与使用串行中断作为 115k2 上数据包开头的微控制器进行通信 而 setcommbreak 有两个问题 对于 115k2 中
  • 使用 Python 将 Excel 中的图表导出为图像

    我一直在尝试将 Excel 中的图表导出为 Python 中的图像文件 JPG 或 ING 我正在查看 WIn32com 这是我到目前为止所拥有的 import win32com client as win32 excel win32 ge
  • 如何将CString转换为整数和浮点数? [复制]

    这个问题在这里已经有答案了 我正在尝试转换CStringint 和 float 但无法找到任何 C 库函数来完成此操作 请帮忙 正确的UNICODE 符合规定的方式MFC如下 CString sInt T 10 int n ttoi sIn

随机推荐