16

しばらくは問題なく動作していましScreen.PrimaryScreen.Bounds.Sizeたが、大画面テレビに接続された Windows7 コンピューターでは、正しくない値が返されます。

私は他の場所で試してみSystemInformation.PrimaryMonitorSizeましたが、同じ値が得られました。

デスクトップを右クリックして画面の解像度を取得すると、 と表示されます1920x1080。上記の2つは私に与えています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

4

2 に答える 2

6

Dpi100%以上に設定されたウィンドウでの設定である可能性があります

この方法を試してみてください。これにより、解像度が現在のシステムの Dpi 設定に合わせて調整されます。

Winフォーム:

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 が読み込まれていることを確認してください。

于 2013-03-07T21:53:30.920 に答える