中键拖拽窗口+贴边分屏功能byZz乛_乛

;************************
;*	鼠标中键自由拖拽窗口	*
;*	网页中键后台打开页面	*
;*	双击中键置顶窗口状态	*
;*	窗口拖拽撞击边缘实现	*
;*	自动左右分屏、最大化	*
;*			by Zz乛_乛	*
;************************
#If !WinActive("ahk_class Warcraft III") && !WinActive("ahk_class SDL_app") ;war3/dota2下屏蔽
	MButton:: ; 如不屏蔽中键原功能在前缀加~,但这样拖拽窗口时会实时激活
		CoordMode,Mouse ; 切换到屏幕绝对坐标
		MouseGetPos,Zz_MouseStartX,Zz_MouseStartY,Zz_MouseWin
		WinGet,winstat,MinMax,ahk_id %Zz_MouseWin%
		if(winstat1){
			WinGetPos,Zz_OldPosX,Zz_OldPosY,Zz_OldWidth,Zz_OldHeight,ahk_id %Zz_MouseWin%
			SetTimer,Zz_WatchMouse,10 ; 跟踪鼠标拖拽
		}else if(WinActive("ahk_class Chrome_WidgetWin_1")){ ; 浏览器不最大化中键仍为拖拽
			Send,^{LButton} ; 【网页中键后台打开】(默认为浏览器最大化时)
		}
		KeyWait,MButton,,t0.2 ; 双击判断,等待第二次按键
		if(errorlevel1){
			KeyWait,MButton,d,t0.2 ; 判断第二次按键是否是鼠标中键
			if(errorlevel=0){
				WinSet,AlwaysOnTop,Toggle,ahk_id %Zz_MouseWin% ; 【切换窗口置顶】
			}
		}
	return
	Zz_WatchMouse:
		GetKeyState,Zz_MButtonState,MButton,P
		if Zz_MButtonState=U ; 释放则完成
		{
			SetTimer,Zz_WatchMouse,off
			if(Zz_Drag){ ; 窗口贴边时中键释放则记录宽高
				Zz_Width_%Zz_MouseWin%:=Zz_OldWidth
				Zz_Height_%Zz_MouseWin%:=Zz_OldHeight
			}
			return
		}
		GetKeyState,Zz_EscapeState,Escape,P
		if Zz_EscapeState=D ; 按Esc则还原
		{
			SetTimer,Zz_WatchMouse,off
			WinMove,ahk_id %Zz_MouseWin%,,%Zz_OldPosX%,%Zz_OldPosY%,%Zz_OldWidth%,%Zz_OldHeight%
			return
		}
		; 【重新定位该窗口以匹配鼠标坐标的变化:】
		CoordMode,Mouse
		SetWinDelay,-1 ; 使得窗口移动无延迟
		MouseGetPos,Zz_MouseX,Zz_MouseY
		WinGetPos,Zz_WinX,Zz_WinY,Zz_Width,Zz_Height,ahk_id %Zz_MouseWin%
		; 【窗口拖拽撞击边缘自动左右分屏、最大化:】
		Drag_B:=-5	; 超出边缘像素边界(负数)
		Drag_V:=-50	; 超出边缘像素范围(负数)
		Drag_N:=200	; 超出边缘忽略界限(正数)
		Drag_T:=1	; 生效时间能量点(10ms/个)
		if(!Zz_Drag){	; 拖拽状态
			if(Zz_MouseStartX(A_ScreenWidth-Zz_Width-Drag_B) && Zz_WinX=Drag_T){
					Zz_Right:=true
					Zz_Drag:=true
					Zz_Time:=0
					Zz_Drag_XY()
					WinMove,ahk_id %Zz_MouseWin%,,A_ScreenWidth/2,0,A_ScreenWidth/2,A_ScreenHeight
				}
			}else if(Zz_MouseStartX>Zz_MouseX && Zz_WinXDrag_V){ ; 撞左屏边缘
				Zz_Time+=1
				if(Zz_Time>=Drag_T){
					Zz_Left:=true
					Zz_Drag:=true
					Zz_Time:=0
					Zz_Drag_XY()
					WinMove,ahk_id %Zz_MouseWin%,,0,0,A_ScreenWidth/2,A_ScreenHeight
				}
			}else if(Zz_MouseStartY>Zz_MouseY && Zz_WinYDrag_V){ ; 撞上屏边缘
				Zz_Time+=1
				if(Zz_Time>=Drag_T){
					Zz_Top:=true
					Zz_Drag:=true
					Zz_Time:=0
					Zz_Drag_XY()
					WinMaximize,ahk_id %Zz_MouseWin%
				}
			}
		}else{ ; 撞过忽略界限像素或往回拖拽则还原窗口
			if(Zz_Right && (Zz_MouseX(Drag_MouseX+Drag_N))){ ; 右屏还原
				Zz_WinX:=Drag_WinX
				if(Zz_MouseX>(Drag_MouseX+Drag_N))
					Zz_WinX+=Drag_N
				Zz_WinY:=Drag_WinY
				Zz_Right:=false
				Zz_Drag:=false
			}else if(Zz_Left && (Zz_MouseX>Drag_MouseX || Zz_MouseXDrag_MouseY || Zz_MouseY

给TA捐赠
共{{data.count}}人
人已捐赠
其他

两个游戏窗口同步操作

2020-3-9 0:54:44

其他

临时CE编辑器(简化版)

2020-3-9 0:56:44

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索