使当前窗口向左延伸贴靠其他窗口

这是之前应求帮群友写的一个脚本,或许还有其他人也用得到。

f8::
WinGetPos , x0, y0, w0, h0, A

; 要贴靠的X坐标
col := 0
; 被贴靠的窗口
ztitle := "Desktop"
; 上层窗口被覆盖区域的横坐标。x_start, x_end
arr := [a_screenwidth, 0]

; 获取所有窗口,并从上到下判断窗口边缘
winget, outputvar, list
loop %outputvar%
{
  id := outputvar%a_index%
  wingettitle, title, ahk_id %id%

  ; 跳过当前激活窗口
  if(winactive("A") == id)
    continue
  ; 跳过部分特殊窗口
  else if(title == "" || title == "dummyLayeredWnd")
    continue
  winget, isminmax, minmax, ahk_id %id%
  ; 如果当前窗口最小化,跳过,查看下一个窗口
  if(isminmax == -1)
    continue
  ; 如果当前窗口最大化,跳出,不再查看后面的窗口
  else if(isminmax == 1)
    break

  ; 当前窗口工作区大小和位置
  t := GetClientSize(id, w, h)
  wingetpos, x, y,,, ahk_id %id%

  ; 当前窗口右侧x坐标
  z := x + w

  ; 如果当前窗口右边缘被上层窗口覆盖,跳过。查看下一个窗口
  if(z >= arr[1] && z <= arr[2])
    continue

  ; 更新被覆盖区域
  arr[1] := min(arr[1], x)
  arr[2] := max(arr[2], z)

  ; 更新贴靠坐标
  if(z < x0 && z > col)
  {
    col := z
    ztitle := title
  }
}

winmove, A, , %col% ,%y0%, % x0 - col + w0,% h0
return

GetClientSize(hWnd, ByRef w := "", ByRef h := "")
{
  VarSetCapacity(rect, 16)
  DllCall("GetClientRect", "ptr", hWnd, "ptr", &rect)
  w := NumGet(rect, 8, "int")
  h := NumGet(rect, 12, "int")
}

人已赞赏
办公

阿让的AutoHotkey十年使用总结和脚本分享

2021-2-18 9:49:58

其他

AHKManager-2021年2月19日

2021-2-19 11:31:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索