Windows 10の.NET Core 3/WPF/C#でデスクトップアプリを作っています。
デスクトップ向けのAPI「System.Windows.Forms.Screen」でスクリーンの解像度を取得したのですが、ディスプレイのシステム設定で拡大率を変更していると、実際とは異なる仮想の解像度が返されます(例えば、150%の時、1920x1080の実解像度を持つモニターだと1280x720が返される)。
取得した値をWin32 API(SetWindowRectなど)へ使用すると、ウィンドウの位置が想定している本来の場所からずれてしまうので、システム設定に依存しない、モニターの実解像度を取得する方法を知りたいです。
試したが失敗したもの
- 「Application.OnStartup()」に「SetProcessDPIAware()」を呼び出しす
- 「app.manifest」ファイルに「dpiAware=true」を追加する。
- 「GetMonitorInfo()」でも仮想の解像度が返された。
- 「GetDpiForMonitor()」や「VisualTreeHelper.GetDpi(this)」を始めとするDPIを取得する関数も、拡大率にかかわらず、常に同じ標準値(96や1)が返る
- PresentationSourceで取得できる倍率が常に1なので、TransformToDeviceによる座標変換を計算することはできなかった。
回答1件
あなたの回答
tips
プレビュー