【Windowsフォーム, C#】ウィンドウを最前面に非アクティブで表示

おーぷんれっくあらーとで放送開始通知を表示する時に、ニコ生アラートっぽく最前面&アクティブにならずにフォームを表示させたかった。

フォームを作成して以下のようにすれば希望通りにできました。

public partial class TopMostForm : Form
{
	/* -- 省略 -- */
	
	protected override void OnLoad(EventArgs e)
	{
		SetTopMost();
		base.OnLoad(e);
	}

	[DllImport("user32.dll")]
	[return: MarshalAs(UnmanagedType.Bool)]
	private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint flags);

	// 常に最前面に表示
	private void SetTopMost()
	{
		IntPtr HWND_TOPMOST = new IntPtr(-1);
		
		SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, 0x0010 | 0x0002 | 0x0400 | 0x0001 | 0x0040);
	}

	// Form#Show()でアクティブにしない
	protected override bool ShowWithoutActivation { get { return true; } }
}
スポンサーリンク

フォローする