3

我今天早些时候下载了 AutoHotKey,以恢复我的华硕笔记本电脑上的滚动。我找到了一个进行还原的脚本,我很容易理解它。

这是原始脚本 - 它正在工作。

WheelUp::
Send {WheelDown}
Return

WheelDown::
Send {WheelUp}
Return

但是滚动速度太快了,我决定制作自己的脚本来减慢滚动速度。我目前正在攻读计算机科学硕士学位,所以我已经编程了几年,所以我认为这个任务很简单——它真的是一个简单的脚本。

所以我试了一下,我想出了一些代码 - 唯一的问题是:它不起作用!没有编译错误,我不知道为什么。问题是:为什么下面的代码不起作用?它根本不滚动,但滚动已注册,因为启用了过多输入的警告。

global UpSpeed := 0
global DownSpeed := 0

WheelUp::
global UpSpeed := global UpSpeed++
  if (global UpSpeed > 2)
  { 
    Send {WheelDown}
    global UpSpeed := 0
  }
  Return



WheelDown::
global DownSpeed := global DownSpeed++
  if (global UpSpeed > 2)
  { 
    Send {WheelUp}
    global DownSpeed := 0
  }
  Return
4

1 回答 1

4

我建议不要使用计数器和跳过轮子事件,而是使用Sleep. 您的方法的问题在于,在最坏的情况下,它会跳过前三个轮子事件。您不希望在开始滚动时发生这种情况。也就是说,在较长时间不滚动之后,第一个事件应该立即触发滚动,而不是在您多次旋转滚轮之后。通过根据您的需要
调整持续时间,此代码应该可以解决问题:Sleep

$WheelUp::
    Send {WheelDown}
    Sleep, 75
Return

$WheelDown::
    Send {WheelUp}
    Sleep, 75
Return

对您的代码:global声明仅在函数中才有意义,在第一行。奇怪的是,代码确实可以编译,但在语法上是无稽之谈。在自动执行部分或(热键)标签中定义的变量无论如何都是全局的。
此外,默认情况下,在 AHK 中发送键会触发其自己的热键。在这里,发送WheelDown最终会导致发送WheelUp,反之亦然。修饰符将$防止这种情况发生。

于 2013-10-14T12:28:07.990 回答