c++ 获取 Win32API 显示监视器信息

180it 2021-09-14 PM 2540℃ 0条

使用 GetMonitorInfo 函数获取显示监视器信息。

GetMonitorInfo函数的原型如下

BOOL GetMonitorInfo (
In HMONITOR hMonitor,
Out LPMONITORINFO lpmi
);

第一个参数 hMonitor 是显示监视器的句柄,使用 MonitorFromPoint 函数获得。

第二个参数 lpmi 是一个指向 MONITORINFO 或 MONITORINFOEX 结构的指针,并从 GetMonitorInfo 函数接收监视器信息。

MONITORINFOEX 结构定义如下。

typedef struct tagMONITORINFOEX {
DWORD cbSize; // 结构的大小。即 sizeof (MONITORINFOEX)
RECT rcMonitor; // RECT 结构,表示显示监视器矩形
RECT rcWork; // RECT 结构,表示虚拟屏幕坐标工作区矩形
DWORD dwFlags; // 显示监视器属性
TCHAR szDevice [ CCHDEVICENAME]; // 正在使用的监视器名称
} MONITORINFOEX, * LPMONITORINFOEX;

GetMonitorInfo 使用示例
使用 MonitorFromPoint 函数获取坐标为 (100, 100) 位置处的监视器句柄。通过将此句柄指定为 etMonitorInfo 函数的第一个参数,获取监视器信息。对于单显示器和双显示器,根据 MonitorFromPoint 函数中指定的坐标,结果会有所不同。

#include <windows.h> 
#include <stdio.h> 

int main () 
{ 
    HMONITOR hMonitor; 
    MONITORINFOEX MonitorInfoEx ; 
    POINT pt = {100, 100}; 

    // 获取pt 
    hMonitor = MonitorFromPoint ( pt, MONITOR_DEFAULTTONEAREST); 
    
    // 获取监视器信息
    MonitorInfoEx.cbSize 
    = sizeof ( MonitorInfoEx ); GetMonitorInfo (hMonitor, & MonitorInfoEx); 
    
    // 显示监视器信息
    printf ("rcMonitor.bottom =% d\n", 
    MonitorInfoEx.rcMonitor.bottom ); printf("rcMonitor.left =%d\n", 
    MonitorInfoEx.rcMonitor.left ); printf("rcMonitor.right =%d\n", MonitorInfoEx.rcMonitor.right); 
    printf("rcMonitor.top =% d\n",MonitorInfoEx.rcMonitor.top);

    printf("rcWork.bottom =%d\n", 
    MonitorInfoEx.rcWork.bottom ); printf("rcWork.left =%d\n", 
    MonitorInfoEx.rcWork.left ); printf("rcWork.right =%d\ " n ", 
    MonitorInfoEx.rcWork.right ); printf ("rcWork.top =%d\n", MonitorInfoEx.rcWork.top); 

    if (MonitorInfoEx.dwFlags == MONITORINFOF_PRIMARY) { 
        puts ("This is Primary Monitor") ; 
    } else { 
        puts ("这不是主监视器"); 
    } 

    _tprintf (TEXT ("szDevice =% s \ n"), MonitorInfoEx.szDevice); 

    return 0; 
}

执行结果
rcMonitor.bottom = 1050
rcMonitor.left = 0
rcMonitor.right = 1680
rcMonitor.top = 0
rcWork.bottom = 1010
rcWork.left = 0
rcWork.right = 1680
rcWork.top = 0
这是主监视器
szDevice = \.显示 1

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

c++ 获取 Win32API 显示监视器信息