在 windows 下調試窗口相關的代碼時, 有時候需要檢查一個窗口爲什麼被顯示/隱藏. 歸根結底顯示/隱藏窗口都是通過調用 ShowWindow/SetWindowPos 這兩個 API 來實現的. 這裏提供的腳本本質上就是在這兩個 API 上放斷點. trace 出窗口句柄以及參數. 看腳本:
將文件保存爲 chkshowwnd 到 windbg 安裝目錄. 在 windbg 中這樣調用:
$$>a<chkshowwnd [hwnd]
如果不指定窗口句柄, 則會顯示所有的 ShowWindow/SetWindowPos 調用. 一般你會發現這兩個 API 調用得太多了. 因此, 你可以指定你想關注的窗口句柄, 這樣, 在這個窗口被顯示/隱藏時, windbg 會停下來, 你就可以檢查調用棧了.