2011-09-30 47 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順序(我試着保存然後再恢復它,但沒有運氣)。

那麼,任何人都可以看到我如何做這件事有什麼問題,或者有誰知道它應該怎麼做?

回答

相關問題