【问题标题】:Maximize another process' Window in .NET在 .NET 中最大化另一个进程的窗口
【发布时间】:2011-06-01 18:50:31
【问题描述】:

我在 .net (proc.MainWindowHandle) 中有另一个进程的主窗口的句柄。如何最大化 .net 内的窗口?

【问题讨论】:

    标签: .net windows-process


    【解决方案1】:

    我遇到了一些问题,最后设法解决了。就我而言,我有一个 WinForm 应用程序需要最大化或最小化 WPF 应用程序。

    首先,我们需要导入 InteropServices

    using System.Runtime.InteropServices;
    

    然后我们需要方法来执行我们需要的操作:

    [DllImport("user32.dll")]
    private static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);
    
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
    

    接下来,我们可以通过它的名字检查进程,获取它的窗口位置,然后更新它的窗口位置:

    /// <summary>
    /// WINDOWPLACEMENT showCmd - 1 for normal, 2 for minimized, 3 for maximized, 0 for hide 
    /// </summary>
    public static void MaximizeProcessWindow(string processName)
    { 
        foreach (Process proc in Process.GetProcesses())
        {
            if (proc.ProcessName.Equals(processName))
            {
                try
                { 
                    WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
                    GetWindowPlacement(proc.MainWindowHandle, ref wp); 
    
                    // Maximize window if it is in a normal state
                    // You can also do the reverse by simply checking and setting 
                    // the value of wp.showCmd
                    if (wp.showCmd == 1)
                    {
                        wp.showCmd = 3; 
                    } 
                    SetWindowPlacement(proc.MainWindowHandle, ref wp);                         
                    break;
                }
                catch(Exception ex)
                {
                    // log exception here and do something
                }
            }
        }
    }
    

    你也可以通过窗口标题来获取进程:

    if (proc.MainWindowTitle.Equals(processTitle))
    

    根据进程,您的应用程序可能需要在管理员权限下执行。这可以通过添加清单文件然后添加以下管理员权限来完成:

    <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
    

    【讨论】:

      【解决方案2】:

      您也可以使用SetWindowPlacement。在 Pinvoke.net 上有 further info

      【讨论】:

        【解决方案3】:

        您可以使用 SW_SHOWMAXIMIZED 调用 ShowWindow 以最大化窗口。

        Pinvoke.net 有一个 ShowWindow here 条目。

        例如,

        // Pinvoke declaration for ShowWindow
        private const int SW_SHOWMAXIMIZED = 3;
        
        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
        
        // Sample usage
        ShowWindow(proc.MainWindowHandle, SW_SHOWMAXIMIZED);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          相关资源
          最近更新 更多