2011-09-30 58 views
1

我有一个工具栏应用程序,它可以改变桌面的工作区域并将其自身定位在间隙中(在屏幕的顶部或底部)。我需要一个函数来调整其他窗口的大小,以便它们在调整大小(工具栏始终位于顶部)后不会留在工具栏后面。我使用下面的函数改变工作区:如何调整窗口工作区域的大小,然后更新其他窗口以反映更改?

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

此方法,在该工作区确实得到调整大小,没有窗户保持外面的老大地位,但也存在一些问题:

  • 正常(即没有最大化或最小化)的窗口有时会做出这样 小,他们不DISP奠定,并能够从任务栏 (Vista)的最大化可见
  • 有时方法使其他 窗口“总在最前面”的时候,他们不应该
  • 它改变了窗口的z顺序,看似随意

如果您关闭并重新打开受影响的窗口,这些问题的头两个是固定的,但它不是一个理想的解决方案,我甚至不能手动更正z顺序(我试着保存然后再恢复它,但没有运气)。

那么,任何人都可以看到我如何做这件事有什么问题,或者有谁知道它应该怎么做?

回答