查询监视器的物理大小 [英] Query monitor physical size

查看:107
本文介绍了查询监视器的物理大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不确定这是否是常规Win32 API查询的正确论坛,如果不能,我可以指出一个更好的论坛吗?

I'm not sure if this is the correct forum for general Win32 API queries, if not could you point me to a better one?

 

是否可以查询连接到计算机的显示器的DPI或物理尺寸?

Is there any way to query the DPI or physical size of the monitors connected to the computer?

EnumDisplayDevices和EnumDisplaySettingsEx将给出监视器上的像素数,但是

EnumDisplayDevices and EnumDisplaySettingsEx will give the the number of pixels on a monitor, but the

DEVMODE.dmLogPixels值始终为96(大概来自显示属性/设置/高级/DPI)

DEVMODE.dmLogPixels value is always 96 (presumably that is coming from Display Properties/Settings/Advanced/DPI)

 

TIA,

科林·米勒(Colin S. Miller)

Colin S. Miller

 

推荐答案

//C#示例

[StructLayout(LayoutKind.Sequential)]
公共结构DEVMODE
{
  [MarshalAs(UnmanagedType.ByValTStr,SizeConst = 32)]公共字符串dmDeviceName;
 公开短片dmSpecVersion;
 公开短片dmDriverVersion;
 公开短片dmSize;
 公开短片dmDriverExtra;
  public int   dmFields;

[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE
{
 [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)] public string dmDeviceName;
 public short  dmSpecVersion;
 public short  dmDriverVersion;
 public short  dmSize;
 public short  dmDriverExtra;
 public int    dmFields;

 公共短dmOrientation;
  public short dmPaperSize;
  public short dmPaperLength;
  public short dmPaperWidth;

 public short dmOrientation;
 public short dmPaperSize;
 public short dmPaperLength;
 public short dmPaperWidth;

  public short dmScale;
  public short dmCopies;
  public short dmDefaultSource;
  public short dmPrintQuality;
  public short dmColor;
  public short dmDuplex;
  public short dmYResolution;
  public short dmTTOption;
  public short dmCollat​​e;
  [MarshalAs(UnmanagedType.ByValTStr,SizeConst = 32)]公共字符串dmFormName;
  public short dmLogPixels;
  public short dmBitsPerPel;
  public int  dmPelsWidth;
  public int  dmPelsHeight;

 public short dmScale;
 public short dmCopies;
 public short dmDefaultSource;
 public short dmPrintQuality;
 public short dmColor;
 public short dmDuplex;
 public short dmYResolution;
 public short dmTTOption;
 public short dmCollate;
 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName;
 public short dmLogPixels;
 public short dmBitsPerPel;
 public int   dmPelsWidth;
 public int   dmPelsHeight;

    dmDisplayFlags;
  public int  dmDisplayFrequency;

 public int   dmDisplayFlags;
 public int   dmDisplayFrequency;

    dmICMMethod;
  public int  dmICMIntent;
  public int  dmMediaType;
  public int  dmDitherType;
  public int  dmReserved1;
  public int  dmReserved2;

 public int   dmICMMethod;
 public int   dmICMIntent;
 public int   dmMediaType;
 public int   dmDitherType;
 public int   dmReserved1;
 public int   dmReserved2;

    dmPanningWidth;
  public int  dmPanningHeight;
};

 public int   dmPanningWidth;
 public int   dmPanningHeight;
};


屏幕屏幕= Screen.PrimaryScreen;
int iWidth = a;
int iHeight = b;
DEVMODE dm =新的DEVMODE();
dm.dmDeviceName = new String(new char [32]);
dm.dmFormName =新字符串(新字符[32]);
dm.dmSize =(short)Marshal.SizeOf(dm);
dm.dmBitsPerPel = 16;
如果(0!= EnumDisplaySettings(null,ENUM_CURRENT_SETTINGS,ref dm))
{
//......
//......
//......
}


Screen screen = Screen.PrimaryScreen;
int iWidth =a;
int iHeight =b;
DEVMODE dm = new DEVMODE();
dm.dmDeviceName = new String (new char[32]);
dm.dmFormName = new String (new char[32]);
dm.dmSize = (short)Marshal.SizeOf (dm);
dm.dmBitsPerPel = 16;
if (0 != EnumDisplaySettings(null,ENUM_CURRENT_SETTINGS, ref dm))
{
//......
//......
//......
}

http://msdn.microsoft.com/en-us/library/ms838191.aspx
http://help.outlook.com/en-us/140/ff566484 (v = VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa970067 (v = VS.90).aspx

http://msdn.microsoft.com/en-us/library/dd162611(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms838191.aspx
http://help.outlook.com/en-us/140/ff566484(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa970067(v=VS.90).aspx


这篇关于查询监视器的物理大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆