问题
通过鼠标钩子获取鼠标坐标,还是按照下图:1920 x 1080 显示的,所以是不正确的,应该是按照 1920 / 125%显示
解决
internal class ScreenScale
{
public const int DESKTOPHORZRES = 118;
[DllImport("user32.dll")]
public static extern IntPtr GetDC(IntPtr ptr);
[DllImport("gdi32.dll")]
public static extern int GetDeviceCaps(
IntPtr hdc, // handle to DC
int nIndex // index of capability
);
[DllImport("user32.dll", EntryPoint = "ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc); [DllImport("user32.dll")]
public static extern IntPtr GetDesktopWindow();
public static float GetScreenScale()
{
var hdc = GetDC(GetDesktopWindow());
int nWidth = GetDeviceCaps(hdc, DESKTOPHORZRES);
ReleaseDC(IntPtr.Zero, hdc);
float f_Scale = (float)nWidth / (float)Screen.PrimaryScreen.Bounds.Width;
return f_Scale;
}
使用
float scale = ScreenScale.GetScreenScale();
注意
上面代码,必须在下面代码之前调用(之后在任意位置调用都可以),否则无法获取缩放比例:
if (Environment.OSVersion.Version.Major >= 6)
{
SetProcessDPIAware();
}
