【问题标题】:How to get the aero snap state of a window?如何获得窗口的航空捕捉状态?
【发布时间】:2021-07-06 03:02:21
【问题描述】:

当窗口通过 aero snap 调整大小时,User32.GetWindowPlacement(hWnd).rcNormalPosition 仍然存储其原始矩形,而 User32.GetWindowRect 受到影响。
由于 aero snap 似乎独立于 WINDOWPLACEMENT,所以现在我们无法仅使用 user32.dll 收集实际放置的完整信息。因此,我想知道是否有办法获取窗口的航空捕捉状态,指示窗口是否停靠以及窗口停靠在哪一侧。 p>

【问题讨论】:

    标签: windows winapi aero-snap


    【解决方案1】:

    Aero Snap 是 Shell 的一项功能,而不是窗口系统。因此,窗口系统无法提供该信息,因为它不知道这些状态。

    Shell 也不提供此信息。因此,本质上,系统不会通过公共 API 提供任何给定窗口的 Aero Snap 状态。

    【讨论】:

    • 可惜了。你知道微软为什么不从 Shell 提供这样的 API 吗?
    • @true_mogician:因为开发人员通常不应该需要这些信息。 (另外:更多的工作来记录和支持它。更多的事情要滥用。)
    • 这是系统的一个不透明特性,客户端代码不需要知道。它与WM_GETMINMAXINFO 报告的窗口信息配合使用。它尊重窗口大小调整请求的其他限制。总而言之,甚至没有理由知道 Aero Sanp 的存在。如果您确实有正当的用例,Microsoft 接受“设计变更请求”。不过,你将不得不解释它。
    • 请记住,人们已经要求提供公共 API 12 years ago。虽然我不知道是否有任何正式的 API 发布请求,但看起来它肯定不会得到太多优先处理。
    • @IInspectable 感谢您提供信息。我只是想更准确的恢复一些windows的位置,直接忽略这个功能使用user32.dll就可以了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2012-08-24
    相关资源
    最近更新 更多