Ghub 脚本:向下拖动鼠标并按下鼠标左键自动点击 (LUA)

Ghub Script: Drag mouse down and autocliking by pressing left mouse button (LUA)

所以基本上我是在尝试使用 Ghub Lua 脚本机制来制作标题中解释的内容,并在下面发布我所拥有的代码:

EnablePrimaryMouseButtonEvents(true);
function OnEvent(event, arg)
if IsKeyLockOn("capslock")then
if  IsMouseButtonPressed(1)then
   repeat
   MoveMouseRelative(0,4)
   PressMouseButton(1)
   Sleep(1,2)
   ReleaseMouseButton(1)
   until not IsMouseButtonPressed(1)
end
end
end

问题是,有时它只是在下降的中途停止,有时它根本就没有点击。已经尝试了多种方法来解决这个问题,包括更改鼠标上按下的按钮,现在是 IsMouseButtonPressed(5),效果很好,但我的目标是在按下 MouseButton(1) 时让它工作。如果可能的话,我会感谢你们的帮助,在此先感谢,希望我给了你们所有必要的信息。

问题是因为无法同时模拟 LMB press/release 和监控其状态。
解决方法如下:

步骤 0.
您即将修改鼠标左键的行为。
这是一个具有潜在危险的操作:如果没有 LMB,您几乎无法在计算机上执行任何操作。
所以你必须创建一个“备用LMB”。
例如,如果您不使用鼠标按钮 8,则可以将其设置为 LMB 上的克隆。
转到 GHUB(鼠标设备、“分配”屏幕、系统选项卡)。
将“主要点击”分配给您的物理 MB#8。
现在,如果出现问题并且您的 LMB 停止工作,您可以按 MB#8 而不是 LMB。


步骤 1.
您在游戏中使用鼠标按钮 4(“后退”)吗?

  • 如果是(某些动作在游戏中设置为 MB#4),请继续“步骤 2”。
  • 如果否(游戏忽略 MB#4 按下),跳过“第 2 步”并继续“第 3 步”。

步骤 2.
您必须将游戏操作从 MB#4 重新映射到其他键。
执行以下操作:

  • 选择您当前不在游戏中使用的键盘键
    (假设当前未使用 F12 键)
  • 转到 GHUB(鼠标设备、“分配”屏幕、KEYS 选项卡);
    F12 分配给您的物理 MB#4
  • 转到您的游戏设置;
    将游戏操作设置为 F12 而不是 MB#4

现在当您按下物理 MB#4 时,游戏会收到 F12 并激活游戏动作。
跳过“第 3 步”并继续“第 4 步”。


步骤 3.
转到 GHUB(鼠标设备,“分配”屏幕)。
从物理 MB#4 取消分配标准命令“后退”(单击并从下拉菜单中 select 禁用)。
禁用的 MB#4 看起来像一个白色的圆圈,里面是黑色的。


步骤 4.
设置脚本(见下文)。


步骤 5.
转到 GHUB(鼠标设备、“分配”屏幕、系统选项卡)。
将“后退”分配给您的物理 LMB。
您将看到有关潜在危险操作的警告。
允许此操作,因为如果出现问题,您有“备用 LMB”。

function OnEvent(event, arg)
   if event == "PROFILE_ACTIVATED" then
      EnablePrimaryMouseButtonEvents(true)
   elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
      PressMouseButton(1)
      if IsKeyLockOn("capslock") then
         repeat
            MoveMouseRelative(0,4)
            Sleep(10)
            if not IsMouseButtonPressed(4) then break end
            ReleaseMouseButton(1)
            MoveMouseRelative(0,4)
            Sleep(10)
            PressMouseButton(1)
         until not IsMouseButtonPressed(4)  -- 4 = "Back"
      end
   elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
      ReleaseMouseButton(1)
   elseif event == "PROFILE_DEACTIVATED" then
      ReleaseMouseButton(1)
   end
end