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順序(我試着保存然後再恢復它,但沒有運氣)。
那麼,任何人都可以看到我如何做這件事有什麼問題,或者有誰知道它應該怎麼做?