PrimaryScreen.Size的问题

时间:2013-03-07 21:04:21

标签: c# winforms

我和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

2 个答案:

答案 0 :(得分:5)

可能是您设置在100%以上的Dpi设置

尝试使用此方法,这会将分辨率缩放到当前系统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 Size(SystemParameters.PrimaryScreenHeight * matix.M11, SystemParameters.PrimaryScreenWidth * matix.M22);
}

注意:在运行此代码之前确保已加载MainWindow

答案 1 :(得分:3)

我觉得这不是一个重复的问题,但答案与另一个帖子的答案相同:https://stackoverflow.com/a/13228495/353147因为问题不是关于模糊字体,而是为什么Screen.PrimaryScreen.Bounds.Size返回错误信息。它可以帮助别人。

我确实遇到了一条错误消息,mscorlib抛出了一个空错误。从这个帖子http://forums.asp.net/t/1653876.aspx/1我发现取消选中“启用ClickOnce安全设置”修复了它。这看起来像是一个黑客,但它确实有效。