如何在启用自动隐藏的 Windows 中检测任务栏的高度和方向?
Posted
技术标签:
【中文标题】如何在启用自动隐藏的 Windows 中检测任务栏的高度和方向?【英文标题】:How to detect height and orientation of taskbar in Windows with autohide enabed? 【发布时间】:2012-04-06 10:09:33 【问题描述】:我正在使用 Qt,我想做的是在 Windows 系统托盘中的图标上显示自定义弹出窗口。我可以通过使用geometry() 和任务栏高度通过查找screenGeometry() 和availableGeometry() 之间的差异来获取图标坐标。因此弹出窗口可以正确对齐,并且不会与不同任务栏方向的任务栏重叠(例如,当任务栏位于左侧或屏幕顶部时)。
当任务栏的自动隐藏打开时,问题就开始了,然后显然 availableGeometry 返回与 screenGeometry 相同的值,我再也找不到任务栏的高度了。这会导致弹出窗口与任务栏重叠,甚至显示在错误的位置。
我的问题是:启用自动隐藏后,如何在 Windows 中正确检测任务栏的方向和大小?我应该使用一些 winapi 函数,还是可以纯粹在 Qt 中使用(首选)?
【问题讨论】:
【参考方案1】:1) 使用以下命令检查自动隐藏状态:http://msdn.microsoft.com/en-us/library/bb787947(v=vs.85).aspx 2) 并使用这个找到宽度/高度/方向:http://msdn.microsoft.com/en-us/library/bb787953(v=vs.85).aspx
希望这会有所帮助。是的,这是 WinAPI 函数,所以你应该只在“#ifdef Q_OS_WINDOWS”中使用这个代码——如果你也想在 Linux 上编译的话。
【讨论】:
看起来不错,谢谢 Raxillian。我遇到的另一个问题是检测自动隐藏模式下的任务栏当前是可见还是隐藏。自动隐藏状态只是告诉我,自动隐藏设置是否启用,但没有告诉我它在给定时刻是否可见以上是关于如何在启用自动隐藏的 Windows 中检测任务栏的高度和方向?的主要内容,如果未能解决你的问题,请参考以下文章
Windows平台FramelessWindowHint窗口,点击底部任务栏隐藏
“使用 windows xp 风格的 dpi 缩放”禁用 W7 上任务栏的自动自动隐藏。解决方法?