2

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

我相当确定我使用 GetWindowsPlacement Windows API 方法走在正确的道路上,但我愿意承认,弄清楚如何获取我需要的信息比我目前的 dllCalling 编码能力和 Google 搜索更重要。 t出现任何东西。

简而言之:我想要做的是获取并设置(进入 Windows 窗口管理系统)任何窗口的恢复位置的左上角坐标,而无需实际重绘和移动最大化的窗口。

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

4

1 回答 1

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
}
于 2010-12-30T19:28:57.473 回答