WinAPIを介してモニターを操作する

特徴

以下のクラスを使用して、モニターの数、パラメーター、およびワークスペースの設定に関する情報を取得できます。

なぜそれが必要ですか

特に、タスクバーのような独自のパネルをWPFで作成するには、同様の機能が必要でした。 彼はインターネットで情報を収集し、便利な形式で設計しました。

使用する

プログラムでは次のように記述します。
DisplayDispatcher dispatcher = new DisplayDispatcher(); 


これにより、モニターが自動的に検索され、パラメーターが決定されます。 ListBoxにデータをリストします。
 for (int i = 0; i < dispatcher.Count; i++) lbMonitors.Items.Add(String.Format(" #{0} ({1}x{2}) {3}", i, dispatcher[i].ScreenWidth, dispatcher[i].ScreenHeight, ((dispatcher[i].Availability) ? " " : ""))); 


幅と高さに加えて、仮想デスクトップの占有領域(MonitorArea)とそのワークスペース(WorkArea)のデータも利用できます。

次に、たとえば、メインモニターの作業領域を変更します。
 Rect wa = new Rect { left = 0, right = 0, top = 500, bottom = 500 }; dispatcher.GetMainDisplay().ApplyNewWorkArea(wa); 


その後、メインモニターのウィンドウを最大化しようとすると、長方形(0; 0)-(500; 500)に収まります。

ちょっとした理論

ワークスペースが変更されるモニターが自動的に検出されます。 特定のモニターの領域を変更するには、新しいサイズが仮想デスクトップ上の占有位置に収まる必要があります。 つまり WorkAreaはMonitorAreaに入力する必要があります。
具体的には、提案されたコードでは、ワークスペースは目的のモニターにアクセスして設定され、WinAPI関数を呼び出す前に検証が実行されます。

WinAPI機能を拡張するには、サイトwww.pinvoke.netをお勧めします。

ソースのダウンロード(VS2010)

プログラムで説明されている内容に加えて、選択したモニターの現在の作業領域の概要を確認できます。

PS答えが見つかりませんでしたが、ワークスペースの新しいサイズを考慮して、アクティブなウィンドウの自動再描画を行うことは可能ですか?

Source: https://habr.com/ru/post/J116886/


All Articles