【问题标题】:When should `Sent` be used over `SentInput` in Autohotkey?什么时候应该在 Autohotkey 中使用“Sent”而不是“SentInput”?
【发布时间】:2017-04-18 08:32:47
【问题描述】:

Autohotkey documentation 写道:

SendInput 通常是发送击键和鼠标点击的首选方法,因为它具有卓越的速度和可靠性。在大多数情况下,SendInput 几乎是即时的,即使在发送长字符串时也是如此。由于 SendInput 如此之快,它也更可靠,因为其他窗口意外弹出并拦截击键的机会更少。由于用户在 SendInput 期间键入的任何内容都被推迟到之后,因此可靠性进一步提高。

如果一般首选SendInput,那么在ahk中sent更好的用例有哪些? Sent 何时赢得 SentSentInput 的决定?

【问题讨论】:

  • 根据我的经验,SendInput 通常太快且太敏感,如果您之后不添加睡眠,可能会在某些程序中产生不需要的结果。
  • 默认情况下,sendsendEvent 相同。见autohotkey.com/docs/commands/SendMode.htm。不确定是否仍然存在,但不久前,新的默认 AHK 脚本的模板在其自动执行头部部分有 sendMode, Input

标签: autohotkey


【解决方案1】:

只有在当前设置存在问题时,才应考虑在 SendPlaySendInput 之间切换。如果在激活长宏时键入,SendInput 会导致问题。您的命令可能与宏混合,从而导致不良行为。教程说SendPlay“不支持旧游戏”,但我从来没有遇到过问题。有人可能会评论“你还没有使用足够的 AHK”。也许。

另外,在从 SendPlay 切换到 SendInput 之前,您应该尝试将宏一分为二。例如,“保存控制组,做事,召回控制组”在 Starcraft2 中失败。将其拆分为 Send "save control group, do stuff"; Sleep 10; Send "recall control group"; 有效。

【讨论】:

    【解决方案2】:

    我通常使用SendInput,因为我喜欢近乎瞬时的输入。但是我遇到了一些实际限制:

    • 某些应用程序(如游戏)不喜欢如此快速的击键,因为可能存在禁止机器人操作的规则。

    • 某些应用程序无法以如此快的速度接收击键,它们只会陷入困境。

    • 我有一个应用程序,它允许按 Tab 键在字段之间移动光标。

      • 使用 Tab 键进入字段时,应用程序需要时间来确认光标的到达,然后才能接受任何输入。 SendInput 命令只是为了快速解决这个问题,并经常导致结果好坏参半
      • 多次按 Tab 也存在问题,并且应用程序经常会错过某些选项卡,并且光标会在意外的字段上结束。
    • SendInput 速度太快,无法重播某些内容以进行调试。例如,当我想查看文本是如何插入到非常复杂表单的字段中时。

    • 理论上,使用Send,您可以插入一团文本并在输入字符时随机按住 shift 按钮以增加熵。可以说我想不出为什么这会有用。

    【讨论】:

      猜你喜欢
      • 2019-06-15
      • 2011-06-22
      • 2015-12-11
      • 2012-02-12
      • 2012-06-27
      • 2010-11-29
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多