# SendMode

使 Send 等同于 SendEvent 或 SendPlay, 而不是默认的(SendInput). 也使 Click 和 MouseMove/Click/Drag 使用指定的方法.

    SendMode Mode

## 参数

Mode

  类型: 字符串

  指定以下单词之一:

  Event: 将 Send 切换到 SendEvent 方法, 适用于 SendText, Click 和 MouseMove/Click/Drag.

  Input: 这是所有脚本使用的初始默认值. 它使用 SendInput 方法, 适用于 Send, SendText, Click 和 MouseMove/Click/Drag. 已知限制:

  - Windows 资源管理器忽略 SendInput 的特定导航热键的模拟, 例如 `Alt`+`←`. 要解决这个问题, 可以使用 `SendEvent "!{Left}"` 或 `SendInput "{Backspace}"`.

  InputThenPlay: 与上面相同, 不同之处在于当 SendInput 不可用时, 它并没有退回到 Event 模式, 而是恢复为 Play 模式(如下). 当 SendInput 不可用时, 这也会导致 SendInput 函数本身返回到 Play 模式.

  Play: 切换到 SendPlay 方法, 适用于 Send, SendText, Click 和 MouseMove/Click/Drag. 已知限制:

  - 不能发送在当前键盘布局上不存在的字符(例如英语中的 Ô). 为了解决这个问题, 请使用 SendEvent.
  - 在 RichEdit 控件(可能还有其他的, 例如 WordPad 和 Metapad), 模拟鼠标拖动可能没有效果. 要为特殊的拖动使用替换模式, 请参照此例: `SendEvent "{Click 6 52 Down}{Click 45 52 Up}"`.
  - 模拟鼠标滚轮的滚动只进行一个方向上的移动(通常是向下, 但在一些程序中可能是向上). 此外, 滚轮的滚动在类似 MS Word 和 Notepad 的程序中可能没有效果. 要为特殊的滚动使用替换模式, 请参照此例: `SendEvent "{WheelDown 5}"`.
  - 当在脚本启动中使用 `SendMode "Play"` 时, 会影响所有的重映射按键并可能失去它们的某些功能. 有关详情, 请参阅 SendPlay 重映射限制.
  - SendPlay 不会触发 AutoHotkey 的热键或热字符串, 也不会触发其他程序或操作系统注册的全局热键.

## 备注

由于 SendMode 也改变了 Click 和 MouseMove/Click/Drag 的模式, 所以您有机会为特殊的鼠标事件使用不同的模式. 实现这种操作最便捷的方法是使用 {Click}. 例如:

    SendEvent "{Click 100 200}"  ; SendEvent 使用更老更传统的点击方法.

如果在脚本启动中使用了 SendMode, 那么它还会影响键盘和鼠标重映射. 特别是, 如果你将 `SendMode "Play"` 与重新映射一起使用, 请参阅 SendPlay 的重映射限制.

内置变量 A_SendMode 包含当前的设置.

每个新运行的线程(如 热键, 自定义菜单项或定时子程序) 都会以此函数的默认设置开始. 这个默认设置可以通过在脚本启动中使用此函数来改变.

## 相关

Send, SetKeyDelay, SetMouseDelay, Click, MouseClick, MouseClickDrag, MouseMove

## 示例

让 Send 成为 SendInput 的代名词. 由于其卓越的速度和可靠性, 推荐在新脚本中使用.

    SendMode "Input"

让 Send 成为 SendInput 的代名词, 但如果 SendInput 不可用, 则回到 SendPlay.

    SendMode "InputThenPlay"

dftg