这段脚本通过调用 Windows API 获取窗口内容区域的坐标和大小,并结合任务栏和屏幕分辨率的信息,帮助用户分析和验证窗口布局是否合理。它在窗口管理和布局调整场景中非常实用,同时也可以作为更复杂桌面管理工具的基础模块。

 

WinGet, 任务栏Hwnd, ID, ahk_class Shell_TrayWnd
任务栏 := WinGetClientPos(任务栏Hwnd)

MsgBox % "xy是屏幕绝对坐标,wh是大小值:`n" 任务栏.x "`n" 任务栏.y "`n" 任务栏.w "`n" 任务栏.h


WinGet, Hwnd变量, ID, ahk_class Notepad
记事本编辑框 := WinGetClientPos(Hwnd变量)

MsgBox % "xy是屏幕绝对坐标,wh是大小值:`n" 记事本编辑框.x "`n" 记事本编辑框.y "`n" 记事本编辑框.w "`n" 记事本编辑框.h

MsgBox % "屏幕分辩率高度:" A_ScreenHeight "`n记事本y+h+任务栏h=" 任务栏.h+记事本编辑框.y+记事本编辑框.h

; 这好像只能获取控件坐标,如果获取窗口坐标会不包括标题栏和菜单栏
WinGetClientPos( Hwnd ) {
  VarSetCapacity( size, 16, 0 )
  , DllCall( "GetClientRect", UInt, Hwnd, Ptr, &size )
  , DllCall( "ClientToScreen", UInt, Hwnd, Ptr, &size )
  , x := NumGet(size, 0, "Int")
  , y := NumGet(size, 4, "Int")
  , w := NumGet( size, 8, "Int" )
  , h := NumGet( size, 12, "Int" )
  return { X: x, Y: y, W: w, H: h }
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。