1.判断当前激活窗口是否为指定窗口,若不是则=正常鼠标右键
2.若是,则继续判断 从鼠标右键按下 至 右键松开 之间的物理最短直线距离 是否超过100像素,若没超则发送鼠标右键
3.若已超则标记鼠标右键的移动方向(←→↑↓)
4.←=窗口左移, →=窗口右移, ↑=若窗口不处于最大化状态则自适应左右移, ↓=最小化
窗口左右分屏的逻辑: 一个窗口最大化, 记录x y 宽 高, 4边分别减1像素, 中间留4~5像素空白
#UseHook
A_TitleMatchMode := "RegEx"
GroupAdd("WG1", "Notepad") ;指定的窗口(好像区分大小写)包括txt 浏览器 文件夹
GroupAdd("WG1", "Firefox")
GroupAdd("WG1", "ahk_class ^CabinetWClass$")
KeyHistory(), WinWait("ahk_class ^AutoHotkey$", , 3), WinMaximize() ;获得左右屏的 x y 宽 高
WinGetPos(&ckz1, &ckz2, &ckk, &ckg)
ckz1++, ckz2++, ckg-=2
if mod(ckk,2)
ckk:=(ckk-7)/2, ckz3:=ckz1+ckk+5
else ckk:=(ckk-6)/2, ckz3:=ckz1+ckk+4
WinRestore(), WinMove(ckz1, ckz2, ckk, ckg), WinMinimize()
zyy() ;自适应左右移
{if !WinGetMinMax()
{WinGetPos(&c1,&c2,&c3,&c4)
if c1!=ckz1 and c1!=ckz3 || c2!=ckz2 || c3!=ckk || c4!=ckg
if abs(c1-ckz1)<abs(c1-ckz3)
WinMove(ckz1, ckz2, ckk, ckg)
else WinMove(ckz3, ckz2, ckk, ckg)
}
}
#HotIf WinGetID("A")=WinGetList("ahk_group WG1")[1]
RButton::
{WinActive("A"), MouseGetPos(&x1,&y1)
while getkeystate("RButton", "p")
{sleep(30), MouseGetPos(&x2,&y2)
if abs(x1-x2)>100 || abs(y1-y2)>100
if abs(x1-x2)>=abs(y1-y2)
if x1-x2>0
ToolTip(c1:="←")
else ToolTip(c1:="→")
else if y1-y2>0
ToolTip(c1:="↑")
else ToolTip(c1:="↓")
else ToolTip(c1:="")
}ToolTip()
if !c1
send("{RButton}")
else if c1="←"
WinRestore(), WinMove(ckz1, ckz2, ckk, ckg)
else if c1="→"
WinRestore(), WinMove(ckz3, ckz2, ckk, ckg)
else if c1="↑"
zyy()
else WinMinimize()
}
#HotIf