首页 > 其他分享 >ahk实现鼠标手势:右键左甩复制等

ahk实现鼠标手势:右键左甩复制等

时间:2023-11-18 18:33:13浏览次数:32  
标签:鼠标 ahk xxx yyy Send wegestures 右键

;;用ahk实现类似wegestures的功能:按着右键时左甩复制,右甩粘贴,上滚home,下滚end等。直接下载wegestures更为强大,但如果鼠标有不止2个侧键可用这个ahk脚本作为补充,wegestures只支持2个侧键。以下为代码


;;获取鼠标在屏幕而非窗口中的位置

CoordMode, Mouse, Screen

CoordMode, ToolTip, Screen

SetKeyDelay, 0

SetMouseDelay, 0


;;右键按下获取当前活动窗口id、鼠标位置、鼠标指向窗口id、当前时间

rbutton::

WinGet, activeid, ID, A

MouseGetPos,x,y,mouseid

t := A_TickCount

Return


rbutton up::

;;如果右键按下在50ms-500ms之间抬起(按下右键-甩鼠标-抬起的时间),计算鼠标的横竖位移和,如果小于20像素,相当于手没有移动单击了右键,电脑执行右键单击。如果大于20像素,按鼠标向右、右上、上、左上、左、左下、下、右下八个方向甩动,执行不同的操作。

tt := A_TickCount-t

if(50 < tt and tt <= 500)

{

MouseGetPos,xx,yy

xxx := xx-x

yyy := yy-y

xy := Abs(xxx)+Abs(yyy)


if (xy<=20)  

{

Send {rbutton}

}

else if (xy>20)  

{

rate := yyy/xxx

if (xxx>0 and yyy<0 and -0.41 < rate and rate<=0 or xxx>0 and yyy>0 and 0<= rate and rate < 0.41)  

{

;;激活鼠标指向窗口并粘贴

if activeid=mouseid

Send ^v

if activeid!=mouseid

WinActivate, ahk_id %mouseid%

WinWaitActive, ahk_id %mouseid%

Send ^v

;;在某坐标处显示提示框,700ms后消失,提示框消失的RemoveToolTip代码在最后

ToolTip,   粘贴, 1260, 640

SetTimer, RemoveToolTip, 700

}

if (xxx>0 and yyy<0 and -2.41<=rate and rate<=-0.41)  

{

;;右上操作

}

if (xxx>0 and yyy<0 and rate< -2.41 or xxx<0 and yyy<0 and 2.41< rate or xxx=0 and yyy<0)  

{

;;上操作

}

if (xxx<0 and yyy<0 and 0.41<= rate and rate <=2.41)  

{

;;左上操作

}

if (xxx<0 and yyy<0 and 0<= rate and rate < 0.41 or xxx<0 and yyy>0 and -0.41 < rate and rate<=0)  

{

Send ^c

ToolTip,   复制, 1260, 640

SetTimer, RemoveToolTip, 700

}

if (xxx<0 and yyy>0 and -2.41<=rate and rate<=-0.41)  

{

;;左下操作

}

if (xxx<0 and yyy>0 and rate< -2.41 or xxx>0 and yyy>0 and 2.41< rate or xxx=0 and yyy>0)  

{

;;下操作

}

if (xxx>0 and yyy>0 and 0.41<= rate and rate <=2.41)  

{

;;右下操作

}

}

else if  (0 <= tt and tt <= 50)

;;按下右键超过500ms再抬起算超时,不执行任何操作。为防止ahk计算时间差时大于500ms有时也得出50ms内(不知道为什么),小于50ms也不执行任何操作。不必担心快速单击右键没有执行,人单击鼠标时,鼠标被按下的时间一般都大于50ms。

{

}

}

Return


WheelUp::

;;按着右键上滚,home

GetKeyState,rbuttonp,rbutton,P    

{

If (rbuttonp="D")

{

Send {f9}

;;f9是wegestures的开关,假如开着wegestures,要先关wegestures,执行home后再开,否则易使wegestures上滚失灵。小缺陷是每次执行都提示大大的“wegestures已启用”,又不能单独关掉wegestures启用的提示,可选择关掉所有提示。一般开了wegestures是开启常规鼠标键的手势功能,这时如果有多余的侧键,可使用ahk,注意一个侧键不要ahk和wegestures都占用,一开始会冲突,虽然最终仍可能共用。

t := 0

;;为了不让每次右键上滚执行home都额外执行一次右键单击,让t为0,当前时间减0必定大于500ms,使右键原来的功能超时失灵

Send {home}

Send {f9}

ToolTip,   home, 1260, 640

SetTimer, RemoveToolTip, 700

}

else

{

;;单纯上滚还是上滚

Send {WheelUp}

}

}

Return


Wheeldown::

GetKeyState,rbuttonp,rbutton,P    

{

If (rbuttonp="D")

{

Send {f9}

t := 0

Send {end}

Send {f9}

ToolTip,   end, 1260, 640

SetTimer, RemoveToolTip, 700

}

else

{  

Send {Wheeldown}

}

}

Return


RemoveToolTip:

SetTimer, RemoveToolTip, Off

ToolTip

return


标签:鼠标,ahk,xxx,yyy,Send,wegestures,右键
From: https://blog.51cto.com/u_16345155/8464193

相关文章

  • 系统|--右键卡死|--卸载福X阅读器就好了
    前言系统中安装的软件比较多电脑中可能和这个问题有关系的软件一览↓#TortoiseGit(本来是版本Release2.14.0,后来升级版本到Release2.15.0还是不行)#VisualStudio#福XPDF阅读器#福XPDF编辑器#OneDrive我要复制一个文件夹,每当{选中该文件夹},鼠标右击......
  • 金蝶云星空按钮鼠标悬停内容显示
      效果展示 ......
  • 鼠标拖拽拖动盒子时,与盒子内某些点击事件冲突问题解决
    问题:拖动时会触发圆球的点击事件解决鼠标拖动盒子时,将moving设为true意为正在拖动盒子,此时将class="move"遮挡容器展示在悬浮球上层,以覆盖悬浮球,此时也就不存在触发悬浮球点击事件的冲突了;鼠标拖动完盒子弹起时再将 moving设为false意为不在拖动盒子(遮挡容器class=......
  • [Unity3D]检测鼠标点击角色移动
    学习工具Unity3D学习内容如何检测鼠标点击移动角色自己的理解原理:通过检测鼠标的光线投射(Raycast)是否与地面碰撞(RaycastHit),再检测鼠标左键(Input.GetMouseButton(0))是否点击,如果两个都符合则执行移动方法源代码如下:privateboolInteractWithMovement(){Raycas......
  • UE5 RenderTexture鼠标点选
    好久没有记录了,大家好,今天分享一个最近解决的UE方面的功能情景:把3维物体渲染到纹理,并在umg中使用Image控件显示纹理。此外还支持鼠标在Image上点击时,选中纹理上对应位置的物体。思路理解:在空间中某点某方向,以某视场角观察3维场景,并把画面渲染到纹理上。在UMG的Image控件显示......
  • echarts实现柱状图自动轮播/鼠标悬浮悬停
    1.dataZoom配置dataZoom:[//滑动条{xAxisIndex:0,//这里是从X轴的0刻度开始show:false,//是否显示滑动条,不影响使用type:"inside",//这个dat......
  • 一个很漂亮的鼠标移动特效,Javascript 脚本,可惜复制到博客园配置适配效果不好
    一个很漂亮的鼠标移动特效,Javascript脚本,可惜复制到博客园配置适配效果不好,暂时记录一下<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>小白教程(json.cn)</title></head><body><script>varStats=function(){var......
  • win11命令行恢复win10右键菜单和资源管理器
    前言随着Windows11的发布,许多新的特性和改变引起了用户的广泛关注。然而,对于一些习惯了Windows10操作界面的用户来说,他们可能更希望保留Windows10的一些特性,比如右键菜单和资源管理器。本文将详细介绍如何在Windows11中通过命令行恢复Windows10的右键菜单和资源管理器,帮助用......
  • Armoury Crate(奥创中心) 引起的win11鼠标滚轮频繁转圈
    https://answers.microsoft.com/en-us/windows/forum/all/mouse-cursor-constantly-changing-to-busy-after/875f525d-65c3-4116-93e0-673e9ff6ac8a?page=2......
  • pycharm右键运行python怎么可以像命令行一样传参数?
    需求:我在命令行敲pythonmain.pyhost.ini执行我在pycharm中如何补充这个host.ini的参数。 AI解决:在PyCharm中右键执行运行时,默认情况下是不会传递参数的,需要手动配置才能将参数传递给脚本。你可以按照以下步骤进行设置:在PyCharm中打开main.py文件。点击顶部工具栏......