查询监视器的物理大小 [英] Query monitor physical size
问题描述
我不确定这是否是常规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 dmCollate;
[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屋!