Advertisement
coffeepls

AHK Borderless Window

Mar 7th, 2023
965
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #w::Toggle_Window(WinExist("A"))  
  2.  
  3. Toggle_Window(Window:="") {
  4.     static A := Init()
  5.     if (!Window)
  6.         MouseGetPos,,, Window
  7.     WinGet, S, Style, % (i := "_" Window) ? "ahk_id " Window :  ; Get window style
  8.     if (S & +0xC00000) {                                        ; If not borderless
  9.         WinGet, IsMaxed, MinMax,  % "ahk_id " Window
  10.     if (A[i, "Maxed"] := IsMaxed = 1 ? true : false)
  11.         WinRestore, % "ahk_id " Window
  12.     WinGetPos, X, Y, W, H, % "ahk_id " Window               ; Store window size/location
  13.     for k, v in ["X", "Y", "W", "H"]
  14.         A[i, v] := %v%
  15.     Loop, % A.MCount {                                      ; Determine which monitor to use
  16.         if (X >= A.Monitor[A_Index].Left
  17.             &&  X <  A.Monitor[A_Index].Right
  18.     &&  Y >= A.Monitor[A_Index].Top
  19.     &&  Y <  A.Monitor[A_Index].Bottom) {
  20.         WinSet, Style, -0xC00000, % "ahk_id " Window    ; Remove borders
  21.         WinSet, Style, -0x40000, % "ahk_id " Window    ; Including the resize border
  22.         WinSet, ExStyle, -0x00000200, % "ahk_id " Window ;Also WS_EX_CLIENTEDGE
  23.         ; The following lines are the x,y,w,h of the maximized window
  24.         ; ie. to offset the window 10 pixels up: A.Monitor[A_Index].Top - 10
  25.         WinMove, % "ahk_id " Window,
  26.         , A.Monitor[A_Index].Left                               ; X position
  27.         , A.Monitor[A_Index].Top                                ; Y position
  28.         , A.Monitor[A_Index].Right - A.Monitor[A_Index].Left    ; Width
  29.         , A.Monitor[A_Index].Bottom - A.Monitor[A_Index].Top    ; Height
  30.         break
  31.     }
  32. }
  33. }
  34. else if (S & -0xC00000) {                                           ; If borderless
  35.     WinSet, Style, +0x40000, % "ahk_id " Window         ; Reapply borders
  36. WinSet, Style, +0xC00000, % "ahk_id " Window
  37. WinSet, ExStyle, +0x00000200, % "ahk_id " Window ;Also WS_EX_CLIENTEDGE
  38. WinMove, % "ahk_id " Window,, A[i].X, A[i].Y, A[i].W, A[i].H    ; Return to original position
  39. if (A[i].Maxed)
  40.     WinMaximize, % "ahk_id " Window
  41. A.Remove(i)
  42. }
  43. }
  44.  
  45. Init() {
  46.     A := {}
  47.     SysGet, n, MonitorCount
  48.     Loop, % A.MCount := n {
  49.         SysGet, Mon, Monitor, % i := A_Index
  50.         for k, v in ["Left", "Right", "Top", "Bottom"]
  51.             A["Monitor", i, v] := Mon%v%
  52.     }
  53.     return A
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement