2014-03-26 35 views
0

我需要一个脚本,可以做同样的事情,这个脚本是这样做的:Autohotkey - 当鼠标触摸屏幕边缘两次时发送击键?

~Escape:: If (A_ThisHotkey=A_PriorHotkey && A_TimeSincePriorHotkey<250) Send !{F4} return

该脚本将Alt + F4键在按下Esc键快了两倍多。

我需要一个脚本,当鼠标在一秒钟内触摸屏幕右边缘两次时,可以发送按键。只有当鼠标碰到边缘时才会发生任何事情。

任何人都知道这是否可以用autohotkey实现?

+0

是的,它可以在AHK中实现。您可以使用频繁运行的循环/定时器,并将当前光标位置与相应的窗口边缘进行比较。但是,此算法与您发布的代码无关,因为您无法用热键代表“鼠标悬停事件”。更重要的是,我怀疑这个鼠标手势的本质是非常容易出错的。如果用户穿过右边框,然后返回窗口(例如,关闭右窗口时)会发生什么?一般来说,你想达到什么目的? – MCL

回答

0

我写了一个应该回答你的问题的脚本。每10毫秒,我们就得到鼠标的位置。如果它处于边缘并且现在已经离开它,我们将其计为“轻敲”并启动1秒计时器(1000毫秒,因为我们只希望它只运行一次,代码中的实际参数为负数)。每个水龙头也会将taps增加1,因此我们可以跟踪有多少水龙头。在1秒计时器结束时,我们看到用户是否敲击了屏幕边缘两次。如果是这样,请发送Alt-F4按键!

;; by default ahk gets mouse coordinates relative to the active 
;; window, this sets it to use absolute coordinates 
CoordMode, Mouse, Screen 

;; how often to get the mouse position in milliseconds 
UPDATE_INTERVAL := 10 
RIGHT_EDGE  := A_ScreenWidth - 1 

;; make the script run forever 
#Persistent 
SetTimer, WatchCursor, %UPDATE_INTERVAL% 
return 

WatchCursor: 
    MouseGetPos, xpos 
    ;; a tap is defined by touching and leaving the edge, 
    ;; we don't want to count holding the mouse at the edge 
    ;; as a tap 
    if (prev = RIGHT_EDGE && xpos != RIGHT_EDGE) { 
     taps += 1 
     ; negative time means run once 
     SetTimer, EdgeTimer, -1000 
    } 
    prev := xpos 
return 

EdgeTimer: 
    ;; more than 2 taps are ignored 
    if (taps = 2) { 
     Send !{F4} 
    } 
    taps := 0 
return 
+0

谢谢,工作很好。当鼠标触及屏幕的顶部,底部和左侧边缘时,如何将脚本更改为以相同的方式工作?脚本的哪些部分应该修改? – user1800997

+0

有趣,你应该现在回复!我刚刚完成了重写,现在应该更清晰并且更易于修改。屏幕的分辨率由两个AutoHotkey变量“A_ScreenWidth”和“A_ScreenHeight”保存。通过比较鼠标位置和这两个位置,我们可以判断我们是否是屏幕的边缘。在这个脚本中,我们只需要鼠标的X坐标,但是如果您还想要Y坐标,那么获取鼠标位置的线应该更改为'MouseGetPos,xpos,ypos'。请记住,正如我在评论中提到的那样,点击意味着击中边缘并离开它。 – joonoro

+0

您还必须将以前的'ypos'存储在一个变量中。之后,它只是改变'WatchCursor'中的大if语句来检测正确的边缘。 – joonoro

相关问题