web-dev-qa-db-ja.com

コマンドラインからWindowsの現在の画面解像度を取得するにはどうすればよいですか?

コマンドラインからWindowsのcurrent画面解像度を取得しようとしています。
私が見つけたほとんどの回答に基づいて、私は以下を使用する必要があります:

wmic desktopmonitor get screenheight, screenweight

しかし、これは表示デバイスのmaxでサポートされている解像度を返し、現在の解像度ではないが必要です。

例:
4kモニターを使用していますが、現在は1920x1080でのみ表示するように設定されています。上記のコマンドを実行すると、次のようになります。

ScreenHeight  ScreenWidth
2160          3840

enter image description here

コマンドラインからWindowsの現在の画面解像度を取得するにはどうすればよいですか?

3
Pedro Lobito

アプリケーションが高いDPI認識を宣言しない限り、ほとんどのWindows API関数は互換性のために解像度のスケーリングされたバージョンを返すため、高いDPIを処理することはこれをやや困難にしました。インスピレーション このスタックオーバーフローの回答 私はこのPowerShellスクリプトを書きました:

Add-Type @"
using System;
using System.Runtime.InteropServices;
public class PInvoke {
    [DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd);
    [DllImport("gdi32.dll")] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
}
"@
$hdc = [PInvoke]::GetDC([IntPtr]::Zero)
[PInvoke]::GetDeviceCaps($hdc, 118) # width
[PInvoke]::GetDeviceCaps($hdc, 117) # height

最初に水平解像度、次に垂直解像度の2行を出力します。

実行するには、ファイルに保存します(例:screenres.ps1)PowerShellで起動します。

powershell -ExecutionPolicy Bypass .\screenres.ps1
2
Ben N