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
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()函数运行记事本并保持记事本窗口处于活动状态
© Аверин Андрей для Total Commander Image Averin-And@yandex.ru
|