Send

首页  后退  前进

Send
down2

Send

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

 

Send ( "keys" [, flag = 0] )

参数

keys

发送的按键.

flag

[可选] "按键"的处理方式:

   $SEND_DEFAULT (0) = 按键序列中含特殊字符, 比如 + 和 ! 将视为 SHIFT 和 ALT 键. (默认)

   $SEND_RAW (1) = 按键将按原样发送.

 

常量定义在 "AutoItConstants.au3"

返回值

None.

备注

关于 Send() 的更多说明见 附录. AutoIt 可发送所有的 ASCII 与扩展的 ASCII 字符 (0-255),

要发送 UNICODE 字符, 必须使用 "ASC" 选项与发送的字符代码(见下面的 {ASC} ).

 

"Send()" 命令语法类似 ScriptIt(微软提供的命令行程序) 与 Visual Basic 的 "SendKeys" 命令. 字符按原样发送, 但下列字符除外:

 

'!'

发送 ALT 键击动作; Send("This is text!a") 将会发送 "This is text" 然后点击 "ALT+a".

 

有些程序区分字母的大小写和 ALT 键, 即: "!A" 不同于 "!a". "!A" 表示 ALT+SHIFT+A, 而 "!a" 则表示 ALT+a. 如果有疑问最好使用小写!

 

'+'

发送 SHIFT 键击动作; Send("Hell+o") 将会发送文本 "HellO". Send("!+a") 将会发送 "ALT+SHIFT+a".

 

'^'

发送控制键击动作; Send("^!a") 将会发送 "CTRL+ALT+a".

 

有些程序区分字母的大小写和 CTRL 键,即 "^A" 不同于 "^a". "^A" 表示 CTRL+SHIFT+A, 而 "^a" 表示 CTRL+a. 如果有疑问最好使用小写!

 

'#'

发送 Windows 徽标键; Send("#r") 将会发送 Win+r 启动 Run() 对话框.

 

 

可以设置 SendCapslockMode(选项) 为发送前关闭大小写切换键(Caps Lock), 发送完成后恢复.

但如果在 Send() 函数开始执行时, 用户已按住 Shift 键, 文本可能发送为大写字体.

替代方法是在执行其他 Send() 操作之前执行 Send("{SHIFTDOWN}{SHIFTUP}").

 

某些键盘(如捷克键盘), 当使用 Shift 键或 CAPS LOCK 键被启用时可以发送不同的字符.

由于 AutoIt 的发送实施大写锁定时, 字符将被切换, 所以它不会工作.

也可以发送某些特殊键,但应在括号内:

 

Windows 不允许模拟 "CTRL+ALT+DEL" 组合键!

 

Send 命令 (flag=0)

键击结果

{!}

!

{#}

#

{+}

+

{^}

^

{{}

{

{}}

}

{SPACE}

空格

{ENTER}

主键盘回车键

{ALT}

ALT

{BACKSPACE} or {BS}

退格键(Backspace)

{DELETE} or {DEL}

删除键(Delete)

{UP}

上箭头键

{DOWN}

下箭头键

{LEFT}

左箭头键

{RIGHT}

右箭头键

{HOME}

HOME 键

{END}

END 键

{ESCAPE} or {ESC}

Esc 键

{INSERT} or {INS}

Insert 键

{PGUP}

PageUp 键

{PGDN}

PageDown 键

{F1} - {F12}

功能键

{TAB}

TAB 键

{PRINTSCREEN}

屏幕复制键(PrintScrn)

{LWIN}

左 Windows 徽标键

{RWIN}

右 Windows 徽标键

{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}

小键盘数字0-9

{NUMPADMULT}

小键盘乘号键

{NUMPADADD}

小键盘加号键

{NUMPADSUB}

小键盘减号键

{NUMPADDIV}

小键盘除号键

{NUMPADDOT}

小键盘句点键

{NUMPADENTER}

小键盘的回车键

{APPSKEY}

应用程序键

{LALT}

左 Alt 键

{RALT}

右 Alt 键

{LCTRL}

左 Ctrl 键

{RCTRL}

右 Ctrl 键

{LSHIFT}

左 Shift 键

{RSHIFT}

右 Shift 键

{SLEEP}

电脑休眠键

{ALTDOWN}

按住 ALT 键直到发送 {ALTUP} 完成

{SHIFTDOWN}

按住 SHIFT 键直到发送 {SHIFTUP} 完成

{CTRLDOWN}

按住 CTRL 键直到发送 {CTRLUP} 完成

{LWINDOWN}

按住左徽标键直到发送 {LWINUP} 完成

{RWINDOWN}

按住右徽标键直到发送 {RWINUP} 完成

{ASC nnnn}

发送 ALT+nnnn 组合键

{BROWSER_BACK}

点击浏览器 "后退" 按钮

{BROWSER_FORWARD}

点击浏览器 "向前" 按钮

{BROWSER_REFRESH}

点击浏览器 "刷新" 按钮

{BROWSER_STOP}

点击浏览器 "停止" 按钮

{BROWSER_SEARCH}

点击浏览器 "搜索" 按钮

{BROWSER_FAVORITES}

点击浏览器 "收藏夹" 按钮

{BROWSER_HOME}

运行浏览器并转到主页

{VOLUME_MUTE}

静音

{VOLUME_DOWN}

降低音量

{VOLUME_UP}

提升音量

{MEDIA_NEXT}

选择媒体播放器下一首曲目

{MEDIA_PREV}

选择媒体播放器上一首曲目

{MEDIA_STOP}

停止媒体播放器

{MEDIA_PLAY_PAUSE}

播放/暂停媒体播放器

{LAUNCH_MAIL}

启动电子邮件程序

{LAUNCH_MEDIA}

启动媒体播放器

{LAUNCH_APP1}

启动用户程序 1

{LAUNCH_APP2}

启动用户程序 2

{OEM_102}

102键键盘上的尖括号或反斜杠键

 

发送 ASCII 字符 A (等同于按住 ALT 键, 并在数字键盘上顺序按下065):

   Send("{ASC 065}")

 

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

 

发送 UNICODE 字符, 则输入字符代码(十进制或十六进制), 例如发送一个汉字:

   Send("{ASC 2709}") or Send("{ASC 0xA95}")

 

 

单个键可以重复发送. 例如.

   Send("{DEL 4}")    ;连续点击 DEL 键 4 次

   Send("{S 30}") ;发送 30 个 "S" 字符

   Send("+{TAB 4}") ;连续点击 SHIFT+TAB 4 次

 

发送键击次数可以编程设置, 如果次数为 0, 则不发送键击:

   Send("{M " & $iCount & "}")    ;点击 M 键的次数由 $iCount 变量的值决定

 

 

保持某键按下状态:

   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 & "}")

 

连续 4 次发送 ASCII 码 A:

   $x = Chr(65)

   Send("{" & $x & " 4}")

 

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

 

请注意, 如设置标志参数为 1, 则上述的特殊处理将被禁用.

当你想从变量复制发送文字, 并且希望完全按照原样发送, 则需设置标志参数为 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}")

向右移动到新的菜单或折叠子菜单.

 

 

当在远程计算机上运行一个脚本, 必须使用程序 psexec(见 www.sysinternals.com) 或 beyondexec (见 www.beyondlogic.org),

当发送键击动作到脚本中 Run() 函数启动的程序时, 使用 ControlSend() 或其他的 ControlXXX 函数, 才能直接与控件沟通. 此时即使设置选项 Opt("SendAttachMode", 1) 也是行不通的.

提交时使用 -S 模式, 可以帮助正确地打开远程计算机.

 

Opt("SendKeyDelay",...) 修改发送键击的延迟时间(两次按键之间).

Opt("SendKeyDownDelay",...) 修改按键按下延迟时间(释放按键之前).

同时设置 "SendKeyDelay" 与 "SendKeyDownDelay" 为 0 时, 将删除所有发送击键的延迟时间.

某种情况下可能需要删除延迟, 例如, 当锁定系统 ("#l") 时,可能有必要删除延迟, 以防止"微软徽标键"被卡住了.

 

函数示例

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

----------------------------------------

 

该函数可以通过命令调用 exect

参见:

SendAttachMode (Опция), SendKeepActive, SendKeyDelay (Опция), SendKeyDownDelay (Опция), ControlSend, BlockInput, WinMenuSelectItem

例子
copy

exect=$var_i=4||Send('+{TAB~~'&$var_i&'}') ;; 按TAB 4次

 

exect=Send('{TAB}') ;; 按TAB

 

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]','''',5)||SendKeepActive(HWnd($var_h)) <FOR> 1 <TO> 10 exect=Send('Hello')||Sleep(500) <NEXT> exect=SendKeepActive('''')||WinClose(HWnd($var_h)) ;; 使用Send()函数运行记事本并保持记事本窗口处于活动状态

up2

tcimage © Аверин Андрей для Total Commander Image Averin-And@yandex.ru