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

本文关键字:窗口 其他 更新 然后 何调整 调整 工作区 | 更新日期: 2023-09-27 18:10:03

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

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

这个方法是有效的,因为工作区域确实会被调整大小,并且没有窗口保持在它外面的旧位置,但是有一些问题:

    正常(即
  • 。(不是最大化或最小化)窗口有时是这样做的小到它们不被显示,并且必须从任务栏(Vista)可见
  • 有时方法使其他
  • 它改变了窗口的z轴顺序,看起来是随机的

前两个问题是固定的,如果你关闭并重新打开受影响的窗口,但它几乎不是一个理想的解决方案,我甚至不能手动纠正z轴顺序(我尝试保存z轴顺序之前的方法,然后恢复它之后,但没有运气)。

所以,有没有人知道我这样做有什么问题,或者有人知道应该怎么做吗?

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

正确的方法是创建一个AppBar。参见SHAppBarMessage。知识库中有一个c++示例。CodeProject上有一个c#示例