这是一个棘手的问题。我想制作一个在桌面顶部绘制条形的程序。然后,我希望打开的每个窗口都不会在此标题栏上绘制,即使给定的桌面窗口已最大化。我记得我看到了与此类似的事情,但我不记得该程序。我猜那些扩展任务栏类型的程序必须执行类似的操作,以使窗口不与第二台显示器上的扩展任务栏重叠。
实现这一点需要 Windows 中的什么框架?主动可访问性以查看何时创建窗口,然后以某种方式获取窗口句柄并调整其大小和位置?
我可以遍历窗口列表并移动它们,但是当它们打开或最大化时呢?
任何想法如何实现这种行为?
这是一个棘手的问题。我想制作一个在桌面顶部绘制条形的程序。然后,我希望打开的每个窗口都不会在此标题栏上绘制,即使给定的桌面窗口已最大化。我记得我看到了与此类似的事情,但我不记得该程序。我猜那些扩展任务栏类型的程序必须执行类似的操作,以使窗口不与第二台显示器上的扩展任务栏重叠。
实现这一点需要 Windows 中的什么框架?主动可访问性以查看何时创建窗口,然后以某种方式获取窗口句柄并调整其大小和位置?
我可以遍历窗口列表并移动它们,但是当它们打开或最大化时呢?
任何想法如何实现这种行为?
您正在寻找的称为“工作区”,在 MSDN 上定义为“未被系统任务栏或应用程序桌面工具栏遮挡的屏幕部分”。您可以使用SPI_SETWORKAREA操作设置工作区SystemParametersInfo
——您希望将其设置为现有工作区减去新栏的面积。
听起来您想创建一个 AppBar:Windows 具有对管理桌面区域的内置支持,包括允许您要求它沿一侧为您的应用程序保留空间。有关详细信息,请参阅MSDN:使用应用程序桌面工具栏。
来自 MSDN 的总结:
应用程序桌面工具栏(也称为应用程序栏)是类似于 Windows 任务栏的窗口。它固定在屏幕的边缘,通常包含让用户快速访问其他应用程序和窗口的按钮。系统会阻止其他应用程序使用应用栏使用的桌面区域。在任何给定时间,桌面上都可以存在任意数量的应用栏。