Dockit——超越画中画,有点强的窗口局部显示软件(脚本)

全是由GPT写的,我不懂AHK语法或类似的语法
功能修改:

  1. 支持最大化窗口(方法比较简陋 :应该在原有的程序逻辑中修改,但是我不会,只能曲线____了,即先将最大化无损替换为正常)
  2. 窗口关闭时,将窗口大小恢复为原先大小

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}
	}
2 个赞