这段脚本通过按下 F1
键 实现了 将当前窗口贴靠到其左侧最近的未被遮挡窗口边缘 的功能。它通过遍历桌面上所有窗口,从上到下依次检查窗口的右边缘位置,并根据这些信息动态调整当前窗口的位置和大小。
F1:: 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") }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)