替换Windows Shell或限制应用程序窗口大小

本文关键字:应用程序 窗口大小 Windows Shell 替换 | 更新日期: 2023-09-27 18:16:26

我正在为家庭用户开发一个应用程序。这个应用程序包括完全取代windows资源管理器为自定义应用程序。

我想模仿任务栏的行为。例如,当您单击"记事本"中的"最大化"按钮时,它不会与任务栏重叠。

我已经尝试使用api到AppBar,然而,AppBar api不工作时,windows资源管理器不运行和其他窗口重叠我的任务栏。

你知道我该怎么做吗?如果我能限制最大化窗口的大小。问题是其他应用程序并不总是由我编写的。

替换Windows Shell或限制应用程序窗口大小

我发现了一个使用win32 api SystemParametersInfo的例子。这样,我可以定义一个区域,其他应用程序将适合和留下一个空间,我的窗体,即使其他应用程序是最大化的。

链接到github

public static void MakeNewDesktopArea()
    {
        // Save current Working Area size
        m_rcOldDesktopRect.left = SystemInformation.WorkingArea.Left;
        m_rcOldDesktopRect.top = SystemInformation.WorkingArea.Top;
        m_rcOldDesktopRect.right = SystemInformation.WorkingArea.Right;
        m_rcOldDesktopRect.bottom = SystemInformation.WorkingArea.Bottom;
        // Make a new Workspace
        WinAPI.RECT rc;
        rc.left = SystemInformation.VirtualScreen.Left + 150;
        rc.top = SystemInformation.VirtualScreen.Top; // We reserve the 24 pixels on top for our taskbar
        rc.right = SystemInformation.VirtualScreen.Right;
        rc.bottom = SystemInformation.VirtualScreen.Bottom - 101;
        WinAPI.SystemParametersInfo((int)WinAPI.SPI.SPI_SETWORKAREA, 0, ref rc, 0);
    }