Deseamos mostrarte la mejor información que encontramos en todo internet. Nosotros esperamos que te sea útil y si deseas comentarnos algo que nos pueda ayudar a mejorar hazlo con total libertad.
Solución:
Puedes usar findwindowbycaption
para obtener el identificador, maximice o minimice con showwindow
private const int SW_MAXIMIZE = 3;
private const int SW_MINIMIZE = 6;
// more here: http://www.pinvoke.net/default.aspx/user32.showwindow
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands nCmdShow);
Luego en tu código usas esto:
IntPtr hwnd = FindWindowByCaption(IntPtr.Zero, "The window title");
ShowWindow(hwnd, SW_MAXIMIZE);
Aunque parece que ya tiene el identificador de ventana usando EnumWindows
en ese caso solo necesitarías:
ShowWindow(windows[i].handle, SW_MAXIMIZE);
i
es el índice de la ventana.
para cerrar la ventana usarás:
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool DestroyWindow(IntPtr hwnd);
en el código:
DestroyWindow(hwnd) //or DestroyWindow(windows[i].handle)
esta es la versión no administrada de system.windows.forms.form.close()
o puedes usar:
Process [] proc Process.GetProcessesByName("process name");
proc[0].Kill();
o puedes usar:
static uint WM_CLOSE = 0x0010;
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
en codigo:
PostMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
Puede usar el método nativo ShowWindow con SW_MAXIMIZE, SW_MINIMIZE para ncmdShow Eche un vistazo a http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx
private const int SW_MAXIMIZE = 3;
private const int SW_MINIMIZE = 6;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands nCmdShow);
// in your code
ShowWindow(wnd.Handle, SW_MAXIMIZE);
puedes usar ShowWindowAsync
private const int SW_SHOWNORMAL = 1;
private const int SW_SHOWMINIMIZED = 2;
private const int SW_SHOWMAXIMIZED = 3;
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
ShowWindowAsync(wnd.Handle, SW_SHOWMINIMIZED );
y es mejor y para usar
var openWindows = Process.GetProcesses().Where(process=> String.IsNullOrEmpty(process.MainWindowTitle)==false);
conseguir ventanas abiertas
He probado MainWindowTitle en Porcess y ayuda a buscar en la ventana dado su título.
var handles = Process.GetProcesses().Where(x => x.MainWindowTitle == "Untitled - Notepad").Select(y=>y.Handle).ToList();
Eres capaz de añadir valor a nuestra información asistiendo con tu experiencia en las crónicas.