使用 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
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询