我有一个工具栏应用程序,可以更改桌面的工作区域,并将自己定位在间隙中(位于屏幕的顶部或底部)。我需要一个功能,它将调整其他窗口的大小,以便在调整大小后它们不会留在工具栏后面(工具栏总是在顶部)。我正在使用下面的功能来更改工作区域:
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);
}
这种方法有效,因为工作区确实调整了大小并且没有窗口保持其旧位置,但是存在一些问题:
如果你关闭并重新打开受影响的窗口,前两个问题就解决了,但这不是一个理想的解决方案,我甚至无法手动纠正z顺序(我尝试在方法之前保存z顺序)然后恢复它,但没有运气)。
那么,任何人都可以看到我这样做有什么不对,或者有人知道应该怎么做吗?
答案 0 :(得分:4)
正确的方法是创建一个AppBar。见SHAppBarMessage
。有一个C ++示例in the Knowledge Base。有一个C#样本on CodeProject。