45190


Windowsでコンソールアプリケーションを作っています。  
実行時にウィンドウ位置を変更したいのですがどうすればいいでしょうか？  
APIで行う方法しかないのでしょうか？


CC BY-SA 4.0
2018-06-30T01:01:20.577
45178
2018-06-30T09:53:23.110
29124
question
c#
C# コンソールアプリケーションでのウィンドウ位置の変更について


WindowsのC#のコンソールアプリケーションでは、.NET Framework の[Console
クラス](https://msdn.microsoft.com/ja-
jp/library/system.console\(v=vs.110\).aspx)にある機能は使えるので、`Console.WindowWidth`、`Console.WindowHeight`で幅と高さは簡単に変更できます。

しかしながら、Console クラスには、コマンドプロンプトのウィンドウ上の位置を変更するようなメソッド又はプロパティはないので、Win32 API
を使わないとウィンドウ上の位置を変更することはできません。

もし、Win32 API
を使ってでも実現したいのであれば、DOBON.NETの[この記事](https://dobon.net/vb/dotnet/process/movewindow.html)が参考になると思います。


CC BY-SA 4.0
2018-06-30T04:37:32.280
45182
2018-06-30T06:44:41.810
2018-06-30T06:44:41.810
15171
15171
45178
answer


Yasuhiro
Nijiさんが提示されたリンク先ではウィンドウ位置の変更方法として[`MoveWindow`](https://msdn.microsoft.com/en-
us/library/windows/desktop/ms633534\(v=vs.85\).aspx)が提示されていますがこれは名前に反して移動だけでなくサイズ変更も強要されます。より柔軟な[`SetWindowPos`](https://msdn.microsoft.com/en-
us/library/windows/desktop/ms633545\(v=vs.85\).aspx)を提案します。こちらは、ウィンドウの上下関係、位置、サイズ、再描画を行うか、をフラグで個別指定できます。  
その際、操作にはウィンドウハンドルが必要です。しかしリンク先で提示されている`Process.MainWindowHandle`はコンソールアプリケーションでは正しく機能しません。コンソールアプリケーションでは[`GetConsoleWindow`](https://docs.microsoft.com/en-
us/windows/console/getconsolewindow)で取得できます。

[code]

    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();
    [DllImport("user32.dll")]
    static extern bool SetWindowPos(IntPtr hwnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
    const int SWP_NOSIZE = 1;
    const int SWP_NOZORDER = 4;
    
    static void Main() {
        SetWindowPos(GetConsoleWindow(), IntPtr.Zero, 100, 100, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    }
    
[/code]


CC BY-SA 4.0
2018-06-30T09:53:23.110
45190
2018-06-30T09:53:23.110
4236
45178
answer