回答編集履歴

2 常に最背面にする場合の方法を追加

Harahira

Harahira score 241

2017/10/11 15:18  投稿

ウィンドウを最背面に持っていくには、SetParentを使うのでなく、SetWindowPosを使ってください。
[SetWindowPos](https://msdn.microsoft.com/ja-jp/library/cc411206.aspx)
サブのディスプレイにウィンドを移動するには、以下を参照してください。
[指定したモニターにフォームを表示する](http://dobon.net/vb/dotnet/form/showonmonitor.html)
この二つを組み合わせれば、お望みの動作が実現できると思います。
---
追記
SetWindowPosのHWND_BOTTOMの値は、1です。
uFlagsは、SWP_NOSIZE(値としては1)とSWP_NOMOVE(値としては2)のOR、すなわち3を渡してください。
以下を参考にしてください。
[SetWindowPos (user32)](http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html)
[SetWindowPos (user32)](http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html)
---
追記2
常に最背面にしたいということであれば、以下のコードで実現できます。
```C#
   public partial class Form1 : Form
   {
       private const int WM_WINDOWPOSCHANGING = 0x0046;
       private IntPtr HWND_BOTTOM = (IntPtr)1;
       [StructLayout(LayoutKind.Sequential)]
       public struct WINDOWPOS
       {
           public IntPtr hwnd;
           public IntPtr hwndInsertAfter;
           public int x;
           public int y;
           public int cx;
           public int cy;
           public uint flags;
       }
       public Form1()
       {
           InitializeComponent();
       }
       protected override void WndProc(ref Message m)
       {
           switch (m.Msg)
           {
               case WM_WINDOWPOSCHANGING:
                   WINDOWPOS wp = (WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS));
                   wp.hwndInsertAfter = HWND_BOTTOM;
                   Marshal.StructureToPtr(wp, m.LParam, true);
                   break;
           }
           base.WndProc(ref m);
       }
   }
```
1 SetWindowPosの引数の解説を追記

Harahira

Harahira score 241

2017/10/03 21:34  投稿

ウィンドウを最背面に持っていくには、SetParentを使うのでなく、SetWindowPosを使ってください。
[SetWindowPos](https://msdn.microsoft.com/ja-jp/library/cc411206.aspx)
サブのディスプレイにウィンドを移動するには、以下を参照してください。
[指定したモニターにフォームを表示する](http://dobon.net/vb/dotnet/form/showonmonitor.html)
この二つを組み合わせれば、お望みの動作が実現できると思います。
この二つを組み合わせれば、お望みの動作が実現できると思います。
---
追記
SetWindowPosのHWND_BOTTOMの値は、1です。
uFlagsは、SWP_NOSIZE(値としては1)とSWP_NOMOVE(値としては2)のOR、すなわち3を渡してください。
以下を参考にしてください。
[SetWindowPos (user32)](http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る