在某些窗口中使用鼠标手势(鼠标右键)

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

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

使用窗口钩子自定义MsgBox的初始弹出位置

2022-12-27 8:06:28

其他

冒险岛私服ahk简易辅助

2022-12-30 10:57:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索