デュアル モニターを使用しており、現在の (アプリケーションがアクティブな場所) モニターの高さと幅 (注: 解像度ではありません) を調べたいと考えています。どうすればこれを達成できますか。私のWPFアプリケーションは、現在の画面サイズに基づいて画面サイズオプションを表示します。
4 に答える
冒険したい場合は、レジストリ キーを調べてください。具体的には、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY を実行し、ディスプレイ (またはアクティブなディスプレイのみ) をループし、EDID情報を使用してモニターの画面の幅と高さ (およびピタゴラスの定理、対角線の長さ) を取得します。
この回答には 2 つの部分があります。判断しないでください。新しいものはかなり不確かですが、より良い結果が得られます。私が確信している古いものは、どういうわけか動作します。
新しい答え
ご覧になった質問の 1 つで、非常に重要な回答を見逃していると思います。と を使用して、それらをピクセル解像度の x 値と y 値にそれぞれ分割することによる答えがありましGraphics.DpiX
た。Graphics.DpiY
ここでそれを読んでください!コメントも忘れずに読んでください。
Graphics.DpiX
1 インチのピクセル数はモニターによって異なるため、この人物は、1 インチを構成するのに必要な X 軸のピクセル数を突き止めました。Graphics.DpiY
明らかに y 軸の 1 インチあたりのピクセル数を指している場合も同様です。解像度からインチを求めるには、これら 2 つを割ります。使用方法の詳細については、こちらとこちらをご覧ください。2 番目のリンクは Visual Basic のものですが、C# の知識があれば、構文を理解できるはずです。
注意してください-私はまだ次のいずれも試していません!
を参照することから始めますSystem.Drawing
。
次に、理論的には (これまで試したことがないので、できれば訂正してください)、新しい Graphics クラスを作成する必要があります。
Graphics DesktopGraphics = Graphics.FromHdc(GetDC(IntPtr.Zero));
次に、問題のモニターを参照する新しい Graphics クラスを使用して、DPI と画面解像度を取得し、画面解像度を DPI で割り、画面のインチ数を取得します。
SystemInformation.PrimaryMonitorSize.Width / Graphics.DpiX
幅SystemInformation.PrimaryMonitorSize.Height / Graphics.DpiY
用と高さ用。これら 2 つをそれぞれの変数に割り当てる必要があります。画面の幅と高さ - インチ単位。
また何か間違ったことをしたら、教えてください。私はまだ初心者のプログラマーなので、何か間違ったことをしたとしても、私を非難したり炎上したりしないでください。そうする場合は、適切なコードを提案してください。
古い答え
書いた人; 私の場合はうまくいっているか試してみてください。System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height
ただし、実際には高さをピクセル単位で示していました。この整数をインチに変換する必要があります。
1 インチは 96 ピクセル (より正確には 96.0000000000011) に相当します。したがって、次のコードを記述します。
//Height
Int MonitorHeightinInches = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height / 96;
//Width
Int MonitorWidthinInches = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width / 96;
これで、アプリケーションで必要なだけコードを再利用できます。これは私にとってはうまくいきます。
モニターの物理的な寸法を取得するのは非常に困難です。解像度と DPI を取得してそこから解決できる場合もありますが、必ずしも正しい答えが得られるとは限りません。プロジェクターを想像してみてください。解像度と DPI はご存知かもしれませんが、表示される画像の物理的なサイズはスクリーンまでの距離によって異なります。ただし、プロジェクターだけではありません。たとえば、モニターごとの製造プロセスにより、数値がわずかに異なる場合があります。
物理的なサイズへの言及を削除し、ディスプレイの解像度と DPI 機能に応じて適切にサイズ変更されるフロー レイアウトを作成したいと思います。
試す
System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height
私の場合は機能しています。