using System;
using System.Drawing;
using System.Runtime.InteropServices;
namespace XYDES
{
public
class
PrimaryScreen
{
#region Win32 API
[DllImport(
"user32.dll"
)]
static
extern IntPtr GetDC(IntPtr ptr);
[DllImport(
"gdi32.dll"
)]
static
extern
int
GetDeviceCaps(
IntPtr hdc,
// handle to DC
int
nIndex
// index of capability
);
[DllImport(
"user32.dll"
, EntryPoint =
"ReleaseDC"
)]
static
extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
#endregion
#region DeviceCaps常量
const
int
HORZRES =
8
;
const
int
VERTRES =
10
;
const
int
LOGPIXELSX =
88
;
const
int
LOGPIXELSY =
90
;
const
int
DESKTOPVERTRES =
117
;
const
int
DESKTOPHORZRES =
118
;
#endregion
#region 属性
///
/// 获取屏幕分辨率当前物理大小
///
public
static
Size WorkingArea
{
get {
IntPtr hdc = GetDC(IntPtr.Zero);
Size size =
new
Size();
size.Width = GetDeviceCaps(hdc, HORZRES);
size.Height = GetDeviceCaps(hdc, VERTRES);
ReleaseDC(IntPtr.Zero, hdc);
return
size;
}
}
///
/// 当前系统DPI_X 大小 一般为96
///
public
static
int
DpiX
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
int
DpiX = GetDeviceCaps(hdc, LOGPIXELSX );
ReleaseDC(IntPtr.Zero, hdc);
return
DpiX;
}
}
///
/// 当前系统DPI_Y 大小 一般为96
///
public
static
int
DpiY
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
int
DpiX = GetDeviceCaps(hdc,LOGPIXELSY);
ReleaseDC(IntPtr.Zero, hdc);
return
DpiX;
}
}
///
/// 获取真实设置的桌面分辨率大小
///
public
static
Size DESKTOP
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
Size size =
new
Size();
size.Width = GetDeviceCaps(hdc,DESKTOPHORZRES );
size.Height = GetDeviceCaps(hdc, DESKTOPVERTRES);
ReleaseDC(IntPtr.Zero, hdc);
return
size;
}
}
///
/// 获取宽度缩放百分比
///
public
static
float
ScaleX
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
int
t = GetDeviceCaps(hdc, DESKTOPHORZRES);
int
d = GetDeviceCaps(hdc, HORZRES);
float
ScaleX = (
float
)GetDeviceCaps(hdc, DESKTOPHORZRES) / (
float
)GetDeviceCaps(hdc, HORZRES);
ReleaseDC(IntPtr.Zero, hdc);
return
ScaleX;
}
}
///
/// 获取高度缩放百分比
///
public
static
float
ScaleY
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
float
ScaleY = (
float
)(
float
)GetDeviceCaps(hdc, DESKTOPVERTRES) / (
float
)GetDeviceCaps(hdc, VERTRES);
ReleaseDC(IntPtr.Zero, hdc);
return
ScaleY;
}
}
#endregion
}
}