の周りにウィンドウを移動するためにC#でSetWindowPosを使用する:私は以下のコードを持っている
namespace WindowMover
{
using System.Windows.Forms;
static class Logic
{
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
public static void Move()
{
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Process[] processes = Process.GetProcesses(".");
foreach (var process in processes)
{
var handle = process.MainWindowHandle;
var form = Control.FromHandle(handle);
if (form == null) continue;
SetWindowPos(handle, 0, 0, 0, form.Bounds.Width, form.Bounds.Height, SWP_NOZORDER | SWP_SHOWWINDOW);
}
}
}
}
これは、0,0のデスクトップ(x、y)の上のすべてのウィンドウを移動し、同じ大きさを保つことになっています。 私の問題は、呼び出し元のアプリケーション(C#でビルドされている)だけが移動しているということです。
Control.FromHandle(IntPtr)以外のものを使用する必要がありますか?これはドットネットコントロールを見つけるだけでしょうか?もしそうなら、私は何を使うべきですか? SetWindowPosでも
、二0はちょうど私がそこに固執ランダムint型だった、私はピジンのような複数のウィンドウでint型のためhWndInsertAfter
何についてのプロセスを使用するかわからないんだけど?
それはそこになってきたが、いくつかの窓(複数のウィンドウを持っているそれらのプロセスのように思える)は、すべての移動ではありません。 さて、あなたは私の質問の多くに答えて、いつかは、プログラミングのノウハウをいつまでも持ちたいと思っています。 – Matt
Matt:私はその解決策を追加しました。 EnumWindowsは、すべてのトップレベルウィンドウ(MainWindowHandleウィンドウだけでなく)を反復処理します。これにより、必要なものが得られます。 –