GetMonitorInfo样例
时间: 2024-01-26 14:02:37 浏览: 15
以下是一个使用GetMonitorInfo函数的样例:
```c++
#include <windows.h>
int main()
{
// 获取主显示器信息
MONITORINFO monitorInfo = { sizeof(MONITORINFO) };
GetMonitorInfo(MonitorFromPoint({ 0, 0 }, MONITOR_DEFAULTTOPRIMARY), &monitorInfo);
// 输出主显示器的工作区大小
printf("主显示器的工作区大小:%d x %d\n", monitorInfo.rcWork.right - monitorInfo.rcWork.left, monitorInfo.rcWork.bottom - monitorInfo.rcWork.top);
return 0;
}
```
此样例获取主显示器的工作区大小并输出,使用了以下步骤:
1. 定义一个MONITORINFO结构体并初始化其cbSize成员为结构体大小。
2. 调用MonitorFromPoint函数获取主显示器的句柄。
3. 调用GetMonitorInfo函数获取主显示器的信息。
4. 输出主显示器的工作区大小。
相关问题
EnumDisplayMonitors样例
以下是一个使用EnumDisplayMonitors函数的样例,它可以列出所有可用的显示器并输出它们的设备名称和分辨率:
```C++
#include <Windows.h>
#include <iostream>
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
MONITORINFOEX monitorInfo;
monitorInfo.cbSize = sizeof(monitorInfo);
if (GetMonitorInfo(hMonitor, &monitorInfo))
{
std::cout << "Device name: " << monitorInfo.szDevice << std::endl;
std::cout << "Resolution: " << monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left << "x" << monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top << std::endl;
}
return TRUE;
}
int main()
{
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, NULL);
return 0;
}
```
输出:
```
Device name: \\.\DISPLAY1
Resolution: 1920x1080
Device name: \\.\DISPLAY2
Resolution: 1280x1024
```
C# 调用EnumDisplayMonitors 和GetMonitorInfo 获取屏幕大小
在C#中调用EnumDisplayMonitors和GetMonitorInfo函数获取屏幕大小,您可以使用以下代码:
```csharp
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Drawing;
class Program
{
[DllImport("user32.dll")]
static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, EnumMonitorsDelegate lpfnEnum, IntPtr dwData);
[DllImport("user32.dll")]
static extern bool GetMonitorInfo(IntPtr hMonitor, ref MonitorInfoEx lpmi);
delegate bool EnumMonitorsDelegate(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData);
[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MonitorInfoEx
{
public int cbSize;
public Rect rcMonitor;
public Rect rcWork;
public uint dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string szDevice;
}
static bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData)
{
MonitorInfoEx mi = new MonitorInfoEx();
mi.cbSize = Marshal.SizeOf(mi);
GetMonitorInfo(hMonitor, ref mi);
int width = mi.rcMonitor.right - mi.rcMonitor.left;
int height = mi.rcMonitor.bottom - mi.rcMonitor.top;
Console.WriteLine("Screen width: " + width + ", height: " + height);
return true;
}
static void Main(string[] args)
{
EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorEnumProc, IntPtr.Zero);
}
}
```
该代码使用EnumDisplayMonitors函数枚举所有屏幕,并使用GetMonitorInfo函数获取每个屏幕的大小。然后将屏幕的宽度和高度打印到控制台中。注意,该示例代码使用了一些Windows API结构体和方法,需要在代码中进行声明和引用。