How to minimize/maximize opened Applications

前端 未结 3 1413
再見小時候
再見小時候 2020-12-16 16:48

I have list of open Applications. To get this list i have used following code

 internal static class NativeMethods
{
    public static readonly Int32 GWL_STY         


        
相关标签:
3条回答
  • 2020-12-16 16:58

    You may use native method ShowWindow with SW_MAXIMIZE, SW_MINIMIZE for ncmdShow Take a look at 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);
    
    0 讨论(0)
  • 2020-12-16 16:59

    You can use findwindowbycaption to get the handle then maximize or minimize with 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);
    

    Then in your code you use this:

    IntPtr hwnd = FindWindowByCaption(IntPtr.Zero, "The window title");
    ShowWindow(hwnd, SW_MAXIMIZE);
    

    Although it seems you already have the window handle by using EnumWindows in that case you would only need:

    ShowWindow(windows[i].handle, SW_MAXIMIZE);
    

    i is the index of the window.


    to close the window you will use:

    [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError=true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool DestroyWindow(IntPtr hwnd);
    

    in the code:

    DestroyWindow(hwnd) //or DestroyWindow(windows[i].handle)
    

    this is the unmanaged version of system.windows.forms.form.close()


    or you can use:

    Process [] proc Process.GetProcessesByName("process name");
    proc[0].Kill();
    

    or you can use:

    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);
    

    in code:

    PostMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
    
    0 讨论(0)
  • 2020-12-16 17:02

    you can use 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 );
    

    and it's better and to use

        var openWindows = Process.GetProcesses().Where(process=> String.IsNullOrEmpty(process.MainWindowTitle)==false);
    

    to get opened windows

    I have test MainWindowTitle in Porcess and it helps to search on window given it's caption.

     var handles = Process.GetProcesses().Where(x => x.MainWindowTitle == "Untitled - Notepad").Select(y=>y.Handle).ToList();
    
    0 讨论(0)
提交回复
热议问题