函数参考


Send

向激活窗口发送模拟键击操作.

Send ( "按键" [, 标志] )

参数

按键 要发送的按键序列.
标志 [可选参数] 更改程序处理"按键"的方式:
  标志 = 0 (默认),按键序列中含有的特殊字符比如 + 和 ! 将被视为 SHIFT 和 ALT 键.
  标志 = 1, 按键将按原样发送.

返回值

None.

注意/说明

关于使用 Send 函数的更多说明/技巧请查看 附录 .AutoIt 可发送所有的 ASCII 码及扩展 ASCII 码字符(0-255),若要发送 UNICODE 编码的字符则必须使用"ASC"选项加上您要发送的字符代码(见下面的 {ASC}).

"Send" 命令的语法跟 ScriptIt 以及 Visual Basic 的 "SendKeys" 命令类似.字符序列将按原文发送,但下列字符除外:

'!'
表示告知 AutoIt 要发送一个 ALT 键击动作,因此语句 Send("This is text!a") 的意思是按序发送按键 "This is text" 然后在按下"ALT+a".

有些程序对大小写字符和 ALT 键相当挑剔,举例来说,"!A" 可能会被认为不同于 "!a";第一个代表 ALT+SHIFT+A,而第二个则代表 ALT+a.如果拿不准的话最好使用小写!

'+'
表示告知 AutoIt 要发送一个 SHIFT 键击动作,因此语句 Send("Hell+o") 的意思是按序发送按键 "HellO".Send("!+a") 表示发送 "ALT+SHIFT+a".

'^'
表示告知 AutoIt 要发送一个 CONTROL 键击动作,因此语句 Send("^!a") 的意思是发送按键 "CTRL+ALT+a".

有些程序对大小写字符和 CTRL 键相当挑剔,举例来说, "^A" 可能会被认为不同于 "^a";第一个代表 CTRL+SHIFT+A,而第二个则代表 CTRL+a. 如果拿不准的话最好使用小写!

'#'
井号将发送一个 Windows 徽标键,因此语句 Send("#r") 将发送 Win+r,这将打开“运行”对话框.

您可以通过设置 SendCapslockMode 从而在 Send 函数开始操作前关闭大小写切换键(大写锁,CAPS LOCK)并在完成操作后恢复.
但是,如果在 Send 函数开始执行的时候用户就按住 Shift 键,那么发送的文本可能会是小写字符.
一个解决办法是在每次执行其它 Send 操作前使用语句 Send("{SHIFTDOWN}{SHIFTUP}").

某些键盘(如捷克语)发送按下SHIFT键时或者CAP LOCK(大写锁定)开启时发送不同的字符(大小写时)可能不工作.因为AUTOIT在 CAPS LOCK(大写锁定)开启时发送小写字符得到的却是大写(这是常识):
某些特殊组合键不能被正确发送:

例如: Windows 不允许模拟 "CTRL-ALT-DEL" 组合键


Send 命令(无标志参数) 键击结果
{!} !
{#} #
{+} +
{^} ^
{{} {
{}} }
{SPACE} 空格
{ENTER} 主键盘区的 回车键
{ALT} ALT
{BACKSPACE} / {BS} 退格
{DELETE} / {DEL} 删除
{UP} 向上箭头
{DOWN} 向下箭头
{LEFT} 向左箭头
{RIGHT} 向右箭头
{HOME} HOME
{END} END
{ESCAPE} / {ESC} ESC键
{INSERT} / {INS} INS
{PGUP} PageUp
{PGDN} PageDown
{F1} - {F12} 功能键
{TAB} TAB
{PRINTSCREEN} Print Screen 键
{LWIN} 左徽标键
{RWIN} 右徽标键
{NUMLOCK on} NUMLOCK (on/off/toggle)
{CAPSLOCK off} CAPSLOCK (on/off/toggle)
{SCROLLLOCK toggle} SCROLLLOCK (on/off/toggle)
{BREAK} Ctrl+Break
{PAUSE} PAUSE
{NUMPAD0} - {NUMPAD9} 数字键盘上的 数字键
{NUMPADMULT} 数字键盘上的 乘号
{NUMPADADD} 数字键盘上的 加号
{NUMPADSUB} 数字键盘上的 减号
{NUMPADDIV} 数字键盘上的 除号
{NUMPADDOT} 数字键盘上的 点号
{NUMPADENTER} 数字键盘上的 回车键
{APPSKEY} Windows 应用程序键
{LALT} 左 ALT 键
{RALT} 右 ALT 键
{LCTRL} 左 CTRL 键
{RCTRL} 右 CTRL 键
{LSHIFT} 左 Shift 键
{RSHIFT} 右 Shift 键
{SLEEP} 系统休眠(SLEEP)键
{ALTDOWN} 按住 ALT 键直到发送 {ALTUP} 为止
{SHIFTDOWN} 按住 SHIFT 键直到发送 {SHIFTUP} 为止
{CTRLDOWN} 按住 CTRL 键直到发送 {CTRLUP} 为止
{LWINDOWN} 按住左徽标键直到发送 {LWINUP} 为止
{RWINDOWN} 按住右徽标键直到发送 {RWINUP} 为止
{ASC nnnn} 发送 ALT+nnnn 组合键
{BROWSER_BACK} 仅支持2000/XP:按下浏览器中的"后退"按钮
{BROWSER_FORWARD} 仅支持2000/XP:按下浏览器中的"前进"按钮
{BROWSER_REFRESH} 仅支持2000/XP:按下浏览器中的"刷新"按钮
{BROWSER_STOP} 仅支持2000/XP:按下浏览器中的"停止"按钮
{BROWSER_SEARCH} 仅支持2000/XP:按下浏览器中的"搜索"按钮
{BROWSER_FAVORITES} 仅支持2000/XP:按下浏览器中的"收藏夹"按钮
{BROWSER_HOME} 仅支持2000/XP:运行浏览器并转到主页
{VOLUME_MUTE} 仅支持2000/XP:切换系统静音状态
{VOLUME_DOWN} 仅支持2000/XP:减小系统音量
{VOLUME_UP} 仅支持2000/XP:增大系统音量
{MEDIA_NEXT} 仅支持2000/XP:在播放器中选择播放下一个轨道(影音媒体)
{MEDIA_PREV} 仅支持2000/XP:在播放器中选择播放上一个轨道
{MEDIA_STOP} 仅支持2000/XP:使播放器停止播放
{MEDIA_PLAY_PAUSE} 仅支持2000/XP:使播放器播放/暂停
{LAUNCH_MAIL} 仅支持2000/XP:运行邮件客户端程序
{LAUNCH_MEDIA} 仅支持2000/XP:运行媒体播放器
{LAUNCH_APP1} 仅支持2000/XP:运行用户程序1
{LAUNCH_APP2} 仅支持2000/XP:运行用户程序2

如果要发送 ASCII 字符 A 则参考下例(相当于 ALT+065,按住ALT键并在数字键盘上顺序按下065)
    Send("{ASC 065}")

(在使用两位数的 ASCII 码时必须在前面加一个 0,否则将使用 437号代码页).

如果要发送 UNICODE 字符则输入该字符代码,例如下例将发送一个中文字符
    Send("{ASC 2709}") or Send("{ASC 0xA95}")

可参考下例重复发送某按键.
    Send("{DEL 4}") ;连续4次按下 DEL 键
    Send("{S 30}") ;发送30个字符"S"
    Send("+{TAB 4}") ;连续4次按下 SHIFT+TAB

The key will be send at least once even if the count is zero.

如果要按住(保持按下状态)某个按键
    Send("{a down}") ;按住按键 A
    Send("{a up}") ;松开按键 A

如果要改变 capslock,numlock 和 scrolllock 键的状态,可参考下例:
    Send("{NumLock on}") ;打开 NumLock
    Send("{CapsLock off}") ;关闭 CapsLock
    Send("{ScrollLock toggle}") ;切换 ScrollLock 的状态

如果要用变量来指定重复发送的次数,参考下例:
    $n = 4
    Send("+{TAB " & $n & "}")

如果要用变量来指定要重复发送的 ASCII 字符(比如 A),参考下例:
    $x = Chr(65)
    Send("{" & $x & " 4}")

大多数笔记本电脑的键盘上都会有一个特殊的 Fn 键,此键无法被模拟.

若把标志参数的值设为1则"按键"参数将被原样发送.如果某些文本是从变量里拷贝而来,而您又希望完全按原样发送这些文本的话,就应该使用这一设置.

例如,先打开 文件夹选项窗口(位于控制面板),然后请尝试执行下面这些语句:


Send("{TAB}") 切换到(焦点切换)下一个控件(按钮、复选框等)
Send("+{TAB}") 切换到上一个控件.
Send("^{TAB}") 切换到下一个窗口标签
Send("^+{TAB}") 切换到上一个窗口标签.
Send("{SPACE}") 可用来切换复选框的选中状态或点击某个按钮.
Send("{+}") 通常用来选中某个复选框(如果它"确实是"复选框的话)
Send("{-}") 通常用来取消选中某个复选框.
Send("{NumPadMult}") 完全展开 SysTreeView32 控件内显示的文件夹.

组合 Alt 键使用可访问菜单项,请打开记事本窗口然后尝试执行下面这些语句:
Send("!f") 表示发送 Alt+f,这是打开记事本的文件菜单的快捷键,您还可以试试其它的!


Send("{DOWN}") 移动焦点到下一个菜单项.
Send("{UP}") 移动焦点到上一个菜单项.
Send("{LEFT}") 切换到左边的菜单或收缩子菜单.
Send("{RIGHT}") 切换到右边的菜单或展开子菜单.
如果您对快捷键(Alt+F4,PrintScreen,Ctrl+C等等)的重要性还不太了解,请查看 Windows 的帮助信息(按下热键 Win+F1 即可) 以获得关于快捷键的完整列表.

When running a script on a remote computer through a program as psexec (www.sysinternals.com) or beyondexec (www.beyondlogic.org) it is necessary, specially when sending strokes to a program launch by the script with a Run function, to use ControlSend or other ControlXXX functions to directly communicate with the control. Send even with Opt("SendAttachMode",1) is not working.
Using the -s mode when submitting can help to have better right on the remote computer.

Opt("SendKeyDelay",...) 修改发送按钮的延迟时间(两次按键之间).
Opt("SendKeyDownDelay",...) 修改按钮按下延迟时间(从释放按键结束).
设置 "SendKeyDelay" 和 "SendKeyDownDelay" 都为0将移除所有按键延迟. This may be required under certain circumstances, for example, when locking the system ("#l") it may be necessary to remove the delays in order to prevent the WIN key from being stuck down.

相关

SendAttachMode (Option), SendKeepActive, SendKeyDelay (Option), SendKeyDownDelay (Option), ControlSend, BlockInput, HotKeySet, WinMenuSelectItem

示例/演示


Example()

Func Example()
    ; Simulate the key combination Win + R to open the Run dialogue window.
    Send("#r")

    ; Wait 10 seconds for the Run dialogue window to appear.
    WinWait("Run", "", 10)

    ; Simulate entering notepad.exe and pressing the 'ENTER' key.
    Send("notepad.exe{Enter}")

    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Simulate entering the following string and pressing the 'F5' key to input the date and time into edit control of Notepad.
    Send("Today's time/date is {F5}")

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)

    ; Now a screen will pop up and ask to save the changes, the classname of the window is called
    ; "#32770" and simulating the "TAB" key to move to the second button in which the "ENTER" is simulated to not "save the file"
    WinWaitActive("[CLASS:#32770]")
    Sleep(500)
    Send("{TAB}{ENTER}")
EndFunc   ;==>Example