0

デュアル モニターを使用しており、現在の (アプリケーションがアクティブな場所) モニターの高さと幅 (注: 解像度ではありません) を調べたいと考えています。どうすればこれを達成できますか。私のWPFアプリケーションは、現在の画面サイズに基づいて画面サイズオプションを表示します。

4

4 に答える 4

2

冒険したい場合は、レジストリ キーを調べてください。具体的には、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY を実行し、ディスプレイ (またはアクティブなディスプレイのみ) をループし、EDID情報を使用してモニターの画面の幅と高さ (およびピタゴラスの定理、対角線の長さ) を取得します。

于 2014-02-05T03:47:51.237 に答える
2

この回答には 2 つの部分があります。判断しないでください。新しいものはかなり不確かですが、より良い結果が得られます。私が確信している古いものは、どういうわけか動作します。

新しい答え

ご覧になった質問の 1 つで、非常に重要な回答を見逃していると思います。と を使用して、それらをピクセル解像度の x 値と y 値にそれぞれ分割することによる答えがありましGraphics.DpiXた。Graphics.DpiYここでそれを読んでください!コメントも忘れずに読んでください。

Graphics.DpiX1 インチのピクセル数はモニターによって異なるため、この人物は、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.DpiXSystemInformation.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;

これで、アプリケーションで必要なだけコードを再利用できます。これは私にとってはうまくいきます。

于 2014-03-28T06:22:37.300 に答える
1

モニターの物理的な寸法を取得するのは非常に困難です。解像度と DPI を取得してそこから解決できる場合もありますが、必ずしも正しい答えが得られるとは限りません。プロジェクターを想像してみてください。解像度と DPI はご存知かもしれませんが、表示される画像の物理的なサイズはスクリーンまでの距離によって異なります。ただし、プロジェクターだけではありません。たとえば、モニターごとの製造プロセスにより、数値がわずかに異なる場合があります。

物理的なサイズへの言及を削除し、ディスプレイの解像度と DPI 機能に応じて適切にサイズ変更されるフロー レイアウトを作成したいと思います。

于 2012-10-22T11:49:56.750 に答える
0

試す

       System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height

私の場合は機能しています。

于 2012-10-22T11:24:20.200 に答える