Problems with PrimaryScreen.Size
本文关键字:Size PrimaryScreen with Problems | 更新日期: 2023-09-27 18:02:55
我对Screen.PrimaryScreen.Bounds.Size
已经有一段时间了,但是在我的Windows7电脑上连接到我的大屏幕电视,它给我不正确的值。
我在其他地方读到尝试SystemInformation.PrimaryMonitorSize
,但这给出了相同的值。
当我右键单击桌面以获得屏幕分辨率时,它显示1920x1080
。以上两个是给我1280x720
。
我也试过WPF版本:
var w = System.Windows.SystemParameters.PrimaryScreenWidth;
var h = System.Windows.SystemParameters.PrimaryScreenHeight;
MessageBox.Show(new Size((int)w, (int)h).ToString());
显示尺寸已经通过(右击桌面)Personalize > Desktop
选项更改为150%(因为屏幕是60英寸,你坐得有点远)。
如何检测这一点,以便从上面返回的值可以调整?
注意:我已经发现了如何通过右键单击可执行文件来解决这个问题,并调整兼容性以禁用DPI虚拟化,但我仍然需要一个编程解决方案,这样我就不必让用户自己调整了:参见- http://msdn.microsoft.com/en-us/library/dd464660(VS.85).aspx#dpi_virtualization
这可能是你的Dpi
设置在windows设置高于100%
尝试使用此方法,这将缩放分辨率到当前系统Dpi设置
Winforms:
private Size GetDpiSafeResolution()
{
using (Graphics graphics = this.CreateGraphics())
{
return new Size((Screen.PrimaryScreen.Bounds.Width * (int)graphics.DpiX) / 96
, (Screen.PrimaryScreen.Bounds.Height * (int)graphics.DpiY) / 96);
}
}
WPF :
private Size GetDpiSafeResolution()
{
PresentationSource _presentationSource = PresentationSource.FromVisual(Application.Current.MainWindow);
Matrix matix = _presentationSource.CompositionTarget.TransformToDevice;
return new System.Windows.Size(
System.Windows.SystemParameters.PrimaryScreenWidth * matix.M22,
System.Windows.SystemParameters.PrimaryScreenHeight * matix.M11);
}
注意:请确保在运行此代码之前加载了MainWindow
我不觉得这是一个重复的问题,但答案是相同的另一个线程:https://stackoverflow.com/a/13228495/353147作为问题不是关于模糊的字体,但为什么screen . primarysscreen . bounds . size返回错误的信息。它可以帮助别人。
我确实遇到了一个错误消息,mscorlib抛出了一个null错误。从这个线程http://forums.asp.net/t/1653876.aspx/1我能够发现取消勾选"启用ClickOnce安全设置"修复它。