所有フォームは常に所有者フォームの上に表示されます。所有者が所有するフォームを作成するには、例えば、所有しているフォームのOnwer
プロパティに所有者のフォームの参照を割り当てることができます。
var f = new Form();
f.Owner = this;
f.Show();
は
所有者として別のプロセスのウィンドウを設定します。そのためにはまず、他のプロセスのウィンドウのハンドルを見つける必要があり、その後、SetWindowLong
API関数を使用して、あなたはたとえば、フォームの所有者として、それを設定することができます。上記の例で
//using System.Runtime.InteropServices;
//using System.Diagnostics;
[DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto)]
public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
private void button1_Click(object sender, EventArgs e)
{
var notepad = Process.GetProcessesByName("notepad").FirstOrDefault();
if(notepad!=null)
{
var owner = notepad.MainWindowHandle;
var owned = this.Handle;
var i = SetWindowLong(owned, -8 /*GWL_HWNDPARENT*/, owner);
}
}
、ヨーヨーurフォームは常にメモ帳ウィンドウの上に表示されます。
私は自分のWinFormsアプリケーションを別のプロセス(League of Legends)に「ドッキング」してカスタムインターフェイスを作成したいと思います。 そのように、ゲームウィンドウがバックグラウンドで最小化すると、私のフォームはゲームのトップになりますが、TopMostではなくなります。 –