如何发现最大化的窗口恢复位置坐标?

时间:2010-08-23 17:54:17

标签: autohotkey

正如标题所示,我试图发现当用户从最大化状态恢复时,将重新绘制最大化父窗口的位置。现在,我现在可以通过使用winRestore命令,捕获位置然后再次获取winMaximise来执行此操作,但这会导致窗口a)闪烁,因为它被绘制两次并且b)花费太长时间来进行我想要立即进行的过程对用户(稍后在将窗口移动到另一个屏幕时使用“恢复”位置)。

我很确定我正在使用GetWindowsPlacement Windows API方法走上正确的道路,但我愿意承认,弄清楚如何获取我需要的信息是超越我目前的dllCalling编码能力和谷歌的一步搜索没有任何结果。

简而言之:我希望能够做的是获取并设置(进入Windows窗口管理系统)任何窗口的Restored位置的左上角坐标,而不实际重绘和移动最大化窗口。

有没有人有我可以遵循的方向或指针?谢谢!

1 个答案:

答案 0 :(得分:1)

用户 Lexikos 显示了如何通过对GetWindowPlacement的DLL调用来执行此操作:

http://www.autohotkey.com/forum/post-172836.html#172836

hwnd := WinExist("Untitled - Notepad")
WinGetPos, mX, mY
WinGetNormalPos(hwnd, x, y, w, h)
MsgBox Pos:`nx: %mX%`ny: %mY%`n`nNormalPos:`nx: %x%`ny: %y%`nw: %w%`nh: %h%

WinGetNormalPos(hwnd, ByRef x, ByRef y, ByRef w="", ByRef h="")
{
    VarSetCapacity(wp, 44), NumPut(44, wp)
    DllCall("GetWindowPlacement", "uint", hwnd, "uint", &wp)
    x := NumGet(wp, 28, "int")
    y := NumGet(wp, 32, "int")
    w := NumGet(wp, 36, "int") - x
    h := NumGet(wp, 40, "int") - y
}
相关问题