簡體   English   中英

如何獲得 window 的航空快照 state?

[英]How to get the aero snap state of a window?

當 window 通過 aero snap 調整大小時,User32.GetWindowPlacement(hWnd).rcNormalPosition 仍然存儲其原始矩形,而 User32.GetWindowRect 受到影響。
由於 aero snap 似乎獨立於 WINDOWPLACEMENT,現在我們無法僅使用 user32.dll 收集實際放置的完整信息。 因此,我想知道是否有辦法獲取 window 的 aero snap state,指示window 是否已停靠以及window 停靠在哪一側

Aero Snap 是 Shell 的功能,而不是窗口系統。 因此,窗口系統無法提供該信息,因為它不知道這些狀態。

Shell 也不提供此信息。 因此,從本質上講,系統不會通過公共 API 提供任何給定 window 的 Aero Snap state。

我喜歡讓我的主 windows 記住它們的所有位置信息,以便在它們重新啟動時可以恢復。 在過去,保存 window 布局結構的副本並在重新創建 window 時將其設置回去就足夠了。

引入 snap 需要保留一些額外的信息。 我通過將其 window 矩形與包含 window 的監視器的工作區矩形進行比較來檢測 window 是否似乎被捕捉。如果它似乎被捕捉到其中一個邊緣,我將其與放置信息一起記錄下來。 創建 window 后,我首先恢復 window 位置,然后,如果我記錄了快照 state,我會相應地更改窗口大小和 position。

您可以區分已捕捉到監視器邊緣的 window 與經過仔細調整大小並放置在那里的 window,因為捕捉窗口的矩形與 window 放置中的矩形不匹配。

這種方法在 Windows 7 中非常有效。我最近發現 Windows 10 為捕捉位置和大小增加了更多靈活性,並玩了更多游戲以實現令人討厭的隱形調整邊框。 所以我的檢測代碼並不總能識別出 window,但這應該是可以修復的。

一些流行的軟件(如主流瀏覽器)似乎記得它們被抓拍過,我假設它們使用相同的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM