【问题标题】:AutoHotKey - Three finger dragging script causing minor issue, how to fix?AutoHotKey - 三指拖动脚本导致小问题,如何解决?
【发布时间】:2021-03-25 15:32:35
【问题描述】:

背景

我有以下 AHK 脚本(从 https://medium.com/@dakshin.k1/enable-3-finger-gesture-for-click-and-drag-on-windows-and-linux-cd7165b66851 获得):

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance force

; Enable three-finger drag
drag_enabled := 0

+^#F22::
    if (drag_enabled) {
        Click up
        drag_enabled := 0
    } else {
        drag_enabled := 1
        Click down
    }
    return

LButton::
    if (drag_enabled) {
        Click up
        drag_enabled := 0
    } else {
        click
    }
    return

这应该可以在 任何 Windows 10 笔记本电脑的触摸板上启用 Mac 风格的三指拖动,但需要以下三个步骤:

  1. 执行三指点击。
  2. 将鼠标指针移动到您想要的任何位置。如果拖动一个窗口,窗口应该(并且确实)在您移动它时跟随光标。如果选择文本,您应该会看到文本像您期望的那样突出显示,甚至两指滚动也应该有效(并且确实有效)!
  3. 执行单指点击以完成模拟手势。

问题

我对 AHK 能够做到这一切感到非常惊讶,所以它没有完全 像我希望的那样工作也就不足为奇了。在一段无法确定的时间后,我无法再用我的触控板正常点击/点击

我的问题

  1. +^#F22 实际上做了什么?文档和我对 AHK 的有限知识似乎暗示它将设置 Shift+Ctrl+Win+Whatever F22 means 作为启用上述步骤 1. 的热键。但它是否也启用了第 2 步?如果没有...
  2. AHK 如何能够跟踪鼠标指针,保持拖动动作继续进行,同时从触摸板上移出任意数量的手指并重新接触触摸板是可能的? 脚本的哪几行调用了哪些 Win32 API 函数?
  3. 如何解决触摸板点击问题(我感觉答案是“你不能”,但请证明我错了)?

我已经在这上面花了大约 2 个小时,阅读文档并尝试重新熟悉 AHK,因为自从我上次使用它已经过去了一个时代(即便如此,我从来没有做过任何事情一半 这么高级)!

【问题讨论】:

    标签: windows-10 autohotkey


    【解决方案1】:

    +^#F22 照你说的做,它为 Shift+Ctrl+Win+F22注册了一个热键>(是的,存在 F 键 13-24)。
    因此,在您的安装中,执行三指点击应该会将该组合键发送到 Windows。
    您可以尝试使用例如 SendInput, +^#{F22}
    这应该会打开 Windows 搜索/Cortana。

    在我的笔记本电脑上,用三指轻按即可向 Windows 发送一个简单的 Win+s
    但我猜你的安装会有所不同(无论出于何种原因)。
    您可以通过使用例如找出确切发送的内容。 Keyhistory(docs).


    无论如何,脚本是如何工作的?它实际上非常简单,并且是由 AHK 新手制作的。
    当截获三指点击时(通过+^#F22 热键),脚本会检查用户定义的切换drag_enabled 的计算结果是真还是假。

    • 如果为 false,则不进行拖动。所以它通过发送一个 LButton down 事件开始拖动。
    • 如果为真,则正在拖动。所以它通过发送一个 LButton up 事件来结束拖动。

    LButton 热键在那里,因此也可以通过单击 LButton 来结束拖动。
    热键实际上实现得很糟糕,它破坏了 LButton 的本机功能。我会在下面解决这个问题。


    AHK 是如何跟踪鼠标指针,并在手指从触摸板移开和重新接触的情况下保持拖动动作的?

    AHK 不关心这些。这一切都由Windows处理。执行哪些鼠标移动(单​​击除外)对于拖动操作无关紧要。只有点击才会取消 LButton 被按住。


    如何解决触摸板点击问题(我感觉答案是“你不能”,但请证明我错了)?

    我真的不明白你的意思,但我可以猜到/希望这只是由于 LButton 热键实施不当造成的。我想试试看我下面的改进版本是否能解决它。


    所以改进版:

    +^#F22::
        if (drag_enabled) 
            Click, Up
        else
            Click, Down
        drag_enabled := !drag_enabled
    return
    
    #If, drag_enabled
    LButton::
        Click, Up
        drag_enabled := false
    return
    #If
    

    更改基本上只是压缩/删除无用的代码并正确实现LButton 热键,以免在未进行拖动时破坏 LButton 的本机功能。
    似乎在我的笔记本电脑上工作得很好,除了我用 #s 替换 +^#F22

    【讨论】:

    • 在我的笔记本电脑上,三指轻击只向 Windows 发送了一个简单的Win+S - 你是对的,这是在 Win 10 中注册的默认操作,并且有效在我设置任何这些之前对我来说。我只是通过阅读脚本自己弄清楚了你所说的大部分内容,但主要是对+^#F22 的工作原理感到困惑。嗯,不管出于什么原因,它确实如此,所以 TYVM 为您解答。我会广泛地测试你改进的脚本和 LYK,如果它有效;-)
    • 确实似乎初始脚本的问题在于底部的LButton 热键定义。非常感谢你的帮助! :DI 仍然不明白为什么其他奇怪的组合键有效,也不明白为什么 Win+S 不适合我在 any AHK 脚本 - Windows 坚持为 Windows 搜索保留该热键,可能是因为我禁用了 Cortana...?但无论如何,问题解决了:D
    猜你喜欢
    • 2018-09-01
    • 2016-01-18
    • 1970-01-01
    • 2017-04-29
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多