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

Problems with PrimaryScreen.Size

这可能是你的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安全设置"修复它。