Path of Exile (PoE) Borderless Stretched (Using Hotkey)
BourbonCrow |
PRO |
06/16/25 08:59:08 PM UTC (Edited) |
0 ⭐ |
12229 👁️ |
Never ⏰ |
[Gaming, Path of Exile, poe, Ggg]
#Requires AutoHotkey v2.0
#SingleInstance force
SetTitleMatchMode(3)
SW := A_ScreenWidth
SH := A_ScreenHeight
Global Stretched := false
Global CursorLocked := false
Global CursorWasLockedBeforeFocusLoss := false
Global CursorAutoMode := true
Global GameWatcherRunning := false
; AutoHotkey script to make Path of Exile borderless windowed
;###Settings#####################################################################################
; Hotkey to trigger the resizing (you can change to any key you prefer)
; ^ = ctrl, + = shift, ! = alt more info about hotkeys can be found at https://www.autohotkey.com/docs/v1/Hotkeys.htm
Hotkey "^NumPad0", ToggleBoarderlessStretch
Hotkey "^NumPad5", ToggleAlwaysOnTop
Hotkey "^NumPad3", ToggleCursorLock
; Set the desired width and height for the borderless window
AutoH := SH/1.35 ; 1.35 is the default zoom modifiar. If you get black bars on your game's sides, put it lower start at 1.30, save & reload script till satisfied
DesiredWidth := SW ; Change to desirerd Width of the gaming window, Accepted Values: Value in Pixels, SW for Same Width as monitor
DesiredHeight := AutoH ; Change to desirerd Hight of the gaming window, Accepted Values: Value in Pixels, SH for Same Height as monitor, AutoH for Automatic stretched windowed
; Set desired window location
X := (SW - DesiredWidth)/2 ; Set the desirerd X location of the gaming window, Accepted Values: Value in Pixels 0 being all way left, (SW - DesiredWidth)/2 for automatic center
Y := 0 ; Set the desirerd Y location of the gaming window, Accepted Values: Value in Pixels 0 being all way top, (SH - DesiredHeight)/2 for automatic center, (SH - DesiredHeight) for all way at bottom
; Game name, change as necessary
GameTitle := "Path of Exile"
GameExe := "PathOfExile.exe"
;#############################################################################################
SetTimer(CheckWindowFocus, 200) ; Check window focus 5 times per second
ToggleAlwaysOnTop(ThisHotkey){
; Check if the game window is open
if WinExist(GameTitle){
; Activate the game window found by WinExist
WinActivate
; Remove the borders and title bar
; 0xC40000 = WS_BORDER (0x800000) + WS_DLGFRAME (0x400000) + WS_SIZEBOX aka WS_THICKFRAME (0x040000)
WinSetAlwaysOnTop -1, GameTitle
}
else{
MsgBox "Please launch game first.", "Game not found"
}
}
ToggleBoarderlessStretch(ThisHotkey){
Global Stretched
; Check if the game window is open
if WinExist(GameTitle){
; Activate the game window found by WinExist
WinActivate
;Check if already stretched windowed
if !Stretched {
Stretched := true
; Remove the borders and title bar
; 0xC40000 = WS_BORDER (0x800000) + WS_DLGFRAME (0x400000) + WS_SIZEBOX aka WS_THICKFRAME (0x040000)
WinSetStyle("-0xC40000", GameTitle)
; Resize the window to borderless dimensions
WinMove X, Y, DesiredWidth, DesiredHeight, GameTitle
; Else we return to original resolution
}else{
Stretched := false
WinSetStyle("-0xC40000", GameTitle)
WinMove 0, 0, SW, SH, GameTitle
}
; Reapply cursor lock if active
if CursorLocked {
WinGetPos &winX, &winY, &winW, &winH, GameTitle
rect := Buffer(16, 0)
NumPut("Int", winX, rect, 0)
NumPut("Int", winY, rect, 4)
NumPut("Int", winX + winW, rect, 8)
NumPut("Int", winY + winH, rect, 12)
DllCall("ClipCursor", "Ptr", rect)
}
;ExitApp
}
else{
MsgBox "Please launch game first.", "Game not found"
}
}
ToggleCursorLock(ThisHotkey) {
Global CursorLocked, CursorAutoMode
if CursorLocked {
DllCall("ClipCursor", "Ptr", 0)
CursorLocked := false
CursorAutoMode := false ; prevent auto-relock
ToolTip "Cursor Unlocked"
} else {
if WinExist(GameTitle) {
WinGetPos &winX, &winY, &winW, &winH, GameTitle
rect := Buffer(16, 0)
NumPut("Int", winX, rect, 0)
NumPut("Int", winY, rect, 4)
NumPut("Int", winX + winW, rect, 8)
NumPut("Int", winY + winH, rect, 12)
DllCall("ClipCursor", "Ptr", rect)
CursorLocked := true
CursorAutoMode := true ; allow auto-relock
ToolTip "Cursor Locked"
} else {
MsgBox "Game not found.", "Error"
}
}
SetTimer () => ToolTip(), -1000
}
CheckWindowFocus() {
Global CursorLocked, CursorWasLockedBeforeFocusLoss, CursorAutoMode, Stretched
Global GameTitle, GameExe
hwnd := WinExist(GameTitle)
if !hwnd || WinGetProcessName(hwnd) != GameExe {
Stretched := false
if CursorLocked {
DllCall("ClipCursor", "Ptr", 0)
CursorLocked := false
CursorWasLockedBeforeFocusLoss := false
CursorAutoMode := true
ToolTip "Game closed — cursor unlocked"
SetTimer () => ToolTip(), -1000
}
; Stop this timer, but ensure game watcher is running
SetTimer(CheckWindowFocus, 0)
StartGameWatcher()
return
}
; Game is running, handle cursor lock
if WinActive(GameTitle) {
if !CursorLocked && CursorWasLockedBeforeFocusLoss && CursorAutoMode {
WinGetPos &winX, &winY, &winW, &winH, GameTitle
rect := Buffer(16, 0)
NumPut("Int", winX, rect, 0)
NumPut("Int", winY, rect, 4)
NumPut("Int", winX + winW, rect, 8)
NumPut("Int", winY + winH, rect, 12)
DllCall("ClipCursor", "Ptr", rect)
CursorLocked := true
CursorWasLockedBeforeFocusLoss := false
ToolTip "Cursor re-locked"
SetTimer () => ToolTip(), -1000
}
} else if CursorLocked {
DllCall("ClipCursor", "Ptr", 0)
CursorWasLockedBeforeFocusLoss := true
CursorLocked := false
ToolTip "Cursor auto-unlocked (focus lost)"
SetTimer () => ToolTip(), -1000
}
}
StartGameWatcher() {
Global GameWatcherRunning
if !GameWatcherRunning {
SetTimer(CheckGameRunning, 2000)
GameWatcherRunning := true
}
}
CheckGameRunning() {
Global GameTitle, GameExe, GameWatcherRunning
hwnd := WinExist(GameTitle)
if hwnd && WinGetProcessName(hwnd) = GameExe {
SetTimer(CheckWindowFocus, 200)
SetTimer(CheckGameRunning, 0)
GameWatcherRunning := false
ToolTip "Game relaunched — cursor tracking re-enabled"
SetTimer () => ToolTip(), -1000
}
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎