C# 如何调整窗口工作区的大小,然后更新其他窗口以反映更改?

C# 如何调整窗口工作区的大小,然后更新其他窗口以反映更改?,c#,winapi,resize,window,C#,Winapi,Resize,Window,我有一个工具栏应用程序,它可以改变桌面的工作区域,并将自己定位在屏幕顶部或底部的间隙中。我需要一个功能,将调整大小的其他窗口,使他们不留在工具栏后,调整大小的工具栏总是在顶部。我正在使用以下功能更改工作区域: private bool SetWorkspace(RECT rect) { bool result = SystemParametersInfo(SPI_SETWORKAREA,

我有一个工具栏应用程序,它可以改变桌面的工作区域,并将自己定位在屏幕顶部或底部的间隙中。我需要一个功能,将调整大小的其他窗口,使他们不留在工具栏后,调整大小的工具栏总是在顶部。我正在使用以下功能更改工作区域:

private bool SetWorkspace(RECT rect)
        {
            bool result = SystemParametersInfo(SPI_SETWORKAREA,
                                      0,
                                      ref rect,
                                      SPIF_change);
            if (!result)
           {
               MessageBox.Show("The last error was: " +
                               Marshal.GetLastWin32Error().ToString());
           }

          this.minAll();
          return result;
        }
minAll函数是我调整其他窗口大小的方式:

public void minAll(){
            IntPtr lHwnd = FindWindow("Shell_TrayWnd", null);
            SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero);
            System.Threading.Thread.Sleep(10);
            SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero);
            System.Threading.Thread.Sleep(10);              
         }
此方法有效,因为工作区确实会调整大小,并且没有窗口将其旧位置保留在其外部,但存在一些问题:

正常情况下,即未最大化或最小化的窗口有时会如此 小到无法显示,并且必须从 任务栏视景可见 有时,这种方法会产生其他影响 在不应该的时候,windows“总是在顶部” 它改变窗口的z顺序,似乎是随机的 如果关闭并重新打开受影响的窗口,前两个问题是可以解决的,但这并不是一个理想的解决方案,我甚至无法手动更正z顺序。我尝试在方法之前保存z顺序,然后在方法之后恢复z顺序,但没有成功


那么,有人知道我这样做有什么不对吗?或者有人知道应该怎么做吗?

正确的方法是创建一个AppBar。请参阅SHAppBarMessage。有一个C++样本。有一个C示例。

正确的方法是创建一个AppBar。请参阅SHAppBarMessage。有一个C++样本。有一个C样本