アプリケーションウィンドウを画面上の特定の場所に復元するにはどうすればよいでしょうか。
私はなんとかコードを書くことができましたが、どういうわけか、プログラムでそれを行うためのより簡単で効率的な方法が必要だと感じています...私の現在のバージョンは最初にウィンドウを復元してから必要な場所に移動しています。あとで強制移動せずに元に戻したいです。
私のコード:
public void Send()
{
if (Process.GetProcessesByName("report").Any())
{
Process proc = Process.GetProcessesByName("report").First();
if (proc != null)
{
IntPtr pointer = proc.MainWindowHandle;
SetForegroundWindow(pointer);
SendMessage(pointer, WM_SYSCOMMAND, SC_RESTORE, 0);
Program.MoveWindow(pointer, 0, 0, 100, 100, true);
}
}
// do something
}
もちろん、これには次のものが続きます:
[DllImport("user32.dll")]
static extern int SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
internal static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam);
static Int32 WM_SYSCOMMAND = 0x0112;
static Int32 SC_RESTORE = 0xF120;
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
さらなる解決策と説明をいただければ幸いです。