Вам нужна функция ShowWindow
и флаг SW_MAXIMIZE
.
В C # объявление P / Invoke будет выглядеть так:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_MAXIMIZE = 3;
Добавьте его в свой код здесь:
if (!Ok)
{
Process[] p = Process.GetProcessesByName(ProductName);
SetForegroundWindow(p[0].MainWindowHandle);
ShowWindow(p[0].MainWindowHandle, SW_MAXIMIZE);
}
Если вы действительно хотите проверить, свернуто ли окно в первую очередь, прежде чем развернуть его, вы можете использовать функцию IsIconic
старой школы :
[DllImport("user32.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsIconic(IntPtr hWnd);
// [...]
if (!Ok)
{
Process[] p = Process.GetProcessesByName(ProductName);
IntPtr hwndMain= p[0].MainWindowHandle;
SetForegroundWindow(hwndMain);
if (IsIconic(hwndMain))
{
ShowWindow(hwndMain, SW_MAXIMIZE);
}
}
Если вы просто хотите активировать окно (а не развернуть его), используйте значение SW_SHOW
(5
) вместо SW_MAXIMIZE
. Это восстановит его до прежнего состояния, пока оно не было свернуто.