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顺序(我试着保存然后再恢复它,但没有运气)。
那么,任何人都可以看到我如何做这件事有什么问题,或者有谁知道它应该怎么做?