全是由GPT写的,我不懂AHK语法或类似的语法
功能修改:
- 支持最大化窗口(方法比较简陋 :应该在原有的程序逻辑中修改,但是我不会,只能曲线____了,即先将最大化无损替换为正常)
- 窗口关闭时,将窗口大小恢复为原先大小
DockIt类中 增加代码
_SetChildNoFull(){
try{
if (This.Child.Positions.Start.Style & 0x01000000) { ; WS_MAXIMIZE = 0x01000000
newWidth := A_ScreenWidth
newHeight := A_ScreenHeight
; 取消窗口的最大化状态
WinRestore, % "ahk_id " This.Child.Hwnd
;Windows全屏比较特殊 不能采用0, 0, 1920, 1080 应采用-8, -8, 1920+16, 1080+16
WinMove, % "ahk_id " This.Child.Hwnd ,, % This.Child.Positions.Start.X , % This.Child.Positions.Start.Y, % This.Child.Positions.Start.W, % This.Child.Positions.Start.H
}
}
}
__NEW()中增加This._SetChildNoFull()
到This._GetChild()
的后面
_CloseWindow()更改为
_CloseWindow(){
DockIt.ActiveWindow := ""
try{
DllCall("SetParent", "uint", This.Child.Hwnd , "uint", 0 )
WinSet, AlwaysOnTop, Off , % "ahk_id " This.Child.Hwnd
;MsgBox, % "style: " This.Child.Positions.Start.Style
; 判断窗口是否为全屏
if (This.Child.Positions.Start.Style & 0x01000000) { ; WS_MAXIMIZE = 0x01000000
; 计算窗口的新大小
newWidth := A_ScreenWidth * 0.7
newHeight := A_ScreenHeight * 0.7
; 计算窗口应该放置的位置
newX := (A_ScreenWidth - newWidth) / 2
newY := (A_ScreenHeight - newHeight) / 2
; 移动并调整窗口的大小
WinMove, % "ahk_id " This.Child.Hwnd ,, newX, newY, newWidth, newHeight
WinMaximize, % "ahk_id " This.Child.Hwnd
}
else{
WinMove, % "ahk_id " This.Child.Hwnd ,, % This.Child.Positions.Start.X , % This.Child.Positions.Start.Y, % This.Child.Positions.Start.W, % This.Child.Positions.Start.H
}
}
Commands类中修改GetWinPos()
GetWinPos(hwnd){
local x, y, w, h, style
; 获取窗口位置和大小
WinGetPos, x, y, w, h, % "ahk_id " hwnd
; 获取窗口样式
WinGet, style, Style, % "ahk_id " hwnd
return {X: x, Y: y, W: w, H: h, Style: style}
}