C#获取Windows10屏幕缩放比例的操作方法_第1页
C#获取Windows10屏幕缩放比例的操作方法_第2页
C#获取Windows10屏幕缩放比例的操作方法_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C#获取Windows10屏幕缩放比例的操作方法现在1920x1080以上分辨率的高分屏电脑渐渐普及了。我们会在Windows的显示设置里看到缩放比例的设置。在Windows桌面客户端的开发中,有时会想要精确计算窗口的面积或位置。然而在默认情况下,无论WinForms的Screen.Bounds.Width属性还是WPF中SystemParameters.PrimaryScreenWidth属性,以下图举例,将会返回除以150%的数值1280。而不是真实的物理分辨率1920。

接下来介绍如何获取Displayresolution中显示的实际分辨率。通过如下Win32API的调用:

[DllImport("gdi32.dll",EntryPoint="GetDeviceCaps",SetLastError=true)]

publicstaticexternintGetDeviceCaps(IntPtrhdc,intnIndex);

该方法可以获取设备的硬件信息,可以通过第二个参数nIndex来指定要查询的具体信息。例如我们要用到的以像素为单位的桌面高度DESKTOPVERTRES。

enumDeviceCap

VERTRES=10,

PHYSICALWIDTH=110,

SCALINGFACTORX=114,

DESKTOPVERTRES=117,

///default.aspx/gdi32/GetDeviceCaps.html

}

在获得物理像素高度后,通过计算不难得出屏幕的缩放比列。

privatestaticdoubleGetScreenScalingFactor()

varg=Graphics.FromHwnd(IntPtr.Zero);

IntPtrdesktop=g.GetHdc();

varphysicalScreenHeight=GetDeviceCaps(desktop,(int)DeviceCap.DESKTOPVERTRES);

varscreenScalingFactor=

(double)physicalScreenHeight/Screen.PrimaryScreen.Bounds.Height;

//SystemParameters.PrimaryScreenHeight;

returnscreenScalingFactor;

}

在获取屏幕缩放比例后,诸如通过Graphics类的CopyFromScreen方法来截屏,或者精确控制窗口大小和位置才得以正确实现。

其实在WinForms程序中,我们还有更简单的方式来实现类似效果。即在工程中添加app.manifest文件,将dipAware节点的值设为true。这样修改后,Screen.PrimaryScreen.Bounds将获得实际的物理分辨率尺寸,同时你还会发现WinForms程序不糊了。这是因为Windows默认WinForms程序不支持DPI感知,在高分屏下就直接粗暴的把窗体放大。

applicationxmlns="urn:schemas-microsoft-com:asm.v3"

windowsSettings

dpiAwarexmlns="/SMI/2005/WindowsSettings"true/dpiAware

/windowsSettings

/application

该设置对WPF无效,WPF默认支持DPI感知功能。而从UWP开始Windows客户端技术全面支持高分屏即高DPI缩放。老旧应用程序不肯升级,以至无法支持高分屏,这锅某软背着挺冤的……

所以同学们,现在开始全面转向WinUI3吧,这货是这么些年某软兜兜转转,客户端技术集大成者。用WindowsAPPSDK创建UnpackgedApp时,恍惚间仿佛回到了在XP上装.NETRuntime的时光。

因为Github访问时常抽风,我将示例代码在Gitee上也同步了一份:

Ho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论