c++ - 在 Visual C++ 中访问 MONITORINFOEX 值

标签 c++ winapi

我在尝试检索 MONITORINFOEX 值时感到困惑。我试过:

typedef struct tagMONITORINFO {
    DWORD cbSize;
    RECT  rcMonitor;
    RECT  rcWork;
    DWORD dwFlags;
} MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEX {
    CHAR       szDevice[CCHDEVICENAME];
    MONITORINFO tagMONITORINFO;
} MONITORINFOEX, *LPMONITORINFOEX;
MONITORINFOEX miea;
miea.tagMONITORINFO.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, (&miea));

没有用。我将最后一行修改为:

GetMonitorInfo(hMonitor, ((LPMONITORINFO) &miea));

再次,没有运气。我收到有关 GetMonitorInfo 的第二个参数的编译器消息。

最佳答案

在您展示的代码中,您尝试自己定义作为 WinAPI 一部分的 struct。不要那样做,没有必要。而是包括适当的头文件。

简单示例:

#include <cstdlib>
#include <iostream>

#include <windows.h>

int main()
{
    // just a cheap way to get a handle
    auto monitor{ MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) };

    MONITORINFOEXW miex{ sizeof miex };  // set cbSize member
    if (!GetMonitorInfoW(monitor, &miex)) {
        std::cerr << "GetMonitorInfo() failed :(\n\n";
        return EXIT_FAILURE;
    }

    std::wcout << miex.szDevice << ": "
               << miex.rcMonitor.right  - miex.rcMonitor.left << " x "
               << miex.rcMonitor.bottom - miex.rcMonitor.top  << '\n';
}

示例输出:

\\.\DISPLAY1: 2560 x 1440

关于c++ - 在 Visual C++ 中访问 MONITORINFOEX 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281896/

相关文章:

c++ - 如何启动具有 root 权限的 QProcess?

c++ - 复制/移动分配困惑

c++ - Windows 7 图形用户界面引用

c++ - Windows 10 CredentialProvider 平铺图像透明度

delphi - TRichEdit中设置EM_AUTOURLDETECT后如何检测URL链接?

C++ 模板 - 具有模板化类型的通用方法

c++ - 如何摆脱不安全的功能(sprintf,...)

c# - 您对一组编码标准或最佳实践有什么好的建议/链接可以遵循吗?

windows - RunDLL32 URL下载到文件

c++ - 我可以从 Visual Studio 即时窗口调用 Win32 API 吗?