2013-08-19 13 views
7

私は画面の左側でランダムなウィンドウを最大化したいと思っています。私のコードからWindows Aero関数を使用できますか?このウィンドウのようにマウスのように最大化することができます。私はプログラムでそれをやりたい画面の半分のウィンドウをプログラムで最大化

私はC#を使用して、私は窓のIntPtrを得ることができます。

マウスやキーボードの入力を偽造せずに可能な場合。

+0

残念ながら、彼らの知恵で、マイクロソフトは、エアロスナップ機能の任意のパブリックAPIを提供していませんでしたではありません。 –

+1

これはp/invokeなしでも簡単にできます –

+0

デスクトップのサイズに基づいてウィンドウの位置とサイズを設定することでこの動作を模倣できませんか?十分に簡単で、ちょうど非常に「きれい」ではない – Kippie

答えて

3

それはまったく同じではないのですが、それをうまく偽装:

ShowWindow(handle, SW_MAXIMIZE); 
// for a split second you might see a maximized window here 
MoveWindow(handle, 0, 0, Screen.PrimaryScreen.WorkingArea.Width/2, Screen.PrimaryScreen.WorkingArea.Height, true); 
5

これは、p /呼び出しなしで行うことができます。これは、主画面の左側に現在のウィンドウを配置します

Rectangle rect = Screen.PrimaryScreen.WorkingArea; 
rect.Width = rect.Width/2; 
Bounds = rect; 

はこれを試してみてください。

それからちょうど画面の右側にそれを置くためにこれを追加します。

Location = new Point(rect.Width, 0); 
+0

ウィンドウの状態が最大化されていないため、私は受け入れませんでした。 WinApi(FormWindowStateなどの設定)なしで試してみましたが、何らかの理由でうまくいきません。 – Bitterblue

0

は、特に非子プロセスのために、リアルタイムのプレースメントの力仕事が必要になります。例 - www.ishadow.com/vdm ShowWindow(hWnd、SW_MAXIMIZE)の後にMoveWindow(hWnd、startPos、0、winWidth、winHeight、true)を手動で "修正"する場合は、上記のように動作します。