VBS基础篇 vbscript Sendkeys模拟键盘操作
模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行
其使用格式为:object.SendKeys(string)
object:表示WshShell对象
string:表示要发送的按键指令字符串,需要放在英文双引号中
基本键
每个按键由一个或多个字符表示。
为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母A,可以用"A"
为了表示多个字符,就必须在字符后面直接加上另一个字符。例如,要表示A、B及C,可用"ABC"作为string。
特殊功能键
对于需要与Shift、Ctrl、Alt三个控制键组合的按键,SendKeys使用特殊字符来表示:
Shift---------WshShell.SendKeys"+"
Ctrl---------WshShell.SendKeys"^"
Alt---------WshShell.SendKeys"%"
由于“+”、“^”这些字符用来表示特殊的控制按键了,如何表示这些按键呢?只要用大括号括住这些字符即可。例如:要发送加号“+”,可使用“WshShell.SendKeys"{+}"”
另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键的名称。
例如要发送回车键,需要用“WshShell.SendKeys"{ENTER}"”表示;
发送向下的方向键用“Wshell.SendKeys"{DOWN}"”表示
Space---------WshShell.SendKeys""
Enter---------WshShell.SendKeys"{ENTER}"
←---------WshShell.SendKeys"{RIGHT}"
↑---------WshShell.SendKeys"{UP}"
F1---------WshShell.SendKeys"{F1}"
按键 代码 BACKSPACE {BACKSPACE}, BREAK {BREAK} CAPS LOCK DEL or DOWN ARROW END {END} ENTER {ENTER}或 ESC {ESC} HELP {HELP} HOME {HOME} INS or LEFT ARROW NUM LOCK PAGE DOWN PAGE UP PRINT SCREEN RIGHT ARROW SCROLL LOCK TAB {TAB} UP ARROW F1 {F1} F2 {F2} F3 {F3} F4 {F4} F5 {F5} F6 {F6} F7 {F7} F8 {F8} F9 {F9} F10 {F10}
如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKeys允许使用简化格式进行描述,使用格式为“{按键数字}”。例如要发送10个字母“x”,则输入“WshShell.SendKeys"{x10}"”即可
接下来看一下实例:
按下F5刷新桌面
DimWshShell,Path,i SetWshShell=Wscrpt.CreateObject("Wscrpt.Shell") WshShell.SendKeys"{F5}"
电脑的自动重启
DimWshShell SetWshShell=CreateObject("Wscrpt.Shell") WshShell.SendKeys"^{ESC}u" WshShell.SendKeys"R"
启动任务管理器
DimWshShell SetWshShell=CreateObject("Wscrpt.Shell") WshShell.SendKeys"^+{ESC}"
自动关机
DimWshShell SetWshShell=Wscrpt.CreateObject("Wscrpt.Shell") Wscrpt.Sleep2000 WshShell.Run"shutdown-r-t120" wscrpt.sleep6000 WshShell.Run"shutdown-a"
在记事本中输入HappyBirthday!并保存为birth.txt
DimWshShell SetWshShell=Wscrpt.CreateObject("Wscrpt.Shell") WshShell.Run"notepad" Wscrpt.Sleep1500 WshShell.AppActivate"Ξ?-?±" WshShell.SendKeys"HappyBirthdy!!!" Wscrpt.Sleep500 WshShell.SendKeys"%FS" Wscrpt.Sleep500 WshShell.SendKeys"birth.txt" Wscrpt.Sleep500 WshShell.SendKeys"%S" Wscrpt.Sleep500 WshShell.SendKeys"%FX"
简单地说,SendKey这个命令就是模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行,其使用格式为:
WshShell.SendKeysString “string”表示要发送的按键指令字符串,需要放在英文双引号中。
1、基本键
一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用WshShell.SendKeys"x"即可。也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可。例如,要发送按键"cfan",可以使用WshShell.SendKeys"cfan"
2、特殊功能键
对于需要与Shift、Ctrl、Alt三个控制键组合的按键SendKeys使用特殊字符来表示:
特殊控制键特殊字符
Shift +
Ctrl ^
Alt %
3、组合按键
如要发送的组合按键是同时按下Ctrl+E,需要用WshShell.SendKeys"^e"表示,如果要发送的组合按键是按住Ctrl键的同时按下E与C两个键,这时应使用小括号把字母括起来,书写格式为WshShell.SendKeys"^(ec)"这里要注意它与WshShell.SendKeys"^ec"的区别,后者表示组合按键是同时按住Ctrl和E键,然后松开Ctrl键,单独按下"C"字母键。
由于"+"、"^"这些字符用来表示特殊的控制按键了,如何表示这些按键呢?只要用大括号括住这些字符即可。例如,要发送加号"+",可使用WshShell.SendKeys"{+}"。另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键号名称,例如要发送回车键,需要用WshShell.SendKeys"{ENTER}"表示,发送向下的方向键用WshShell.SendKeys"{DOWN}"表示。
4、多个重复的按键
如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKdys允许使用简化格式进行描述,使用格式为"{按键数字}"。例如要发送10个字母"x",则输入WshShell.SendKeys"{x10}"即可。
让VBS脚本自动在记事本中输入一行文字"Hello,welcometojb51.net"。
DimWshShell SetWshShell=WScript.CreateObject("WScript.Shell") WshShell.Run"notepad" WScript.Sleep200 WshShell.AppActivate"无标题-记事本" WshShell.SendKeys"hello,welcometojb51.net"
可自动定时存盘的记事本
我们最常用的记事本没有Word、WPS那样的自动定时存盘功能,其实利用VBS脚本再加上SendKeys命令,就能弥补这个遗憾。打开记事本,输入以下内容:
将其保存为记事本.vbs,以后要使用记事本时,都通过双击这个脚本文件来打开。
程序详解:
这个脚本的基本思路是定时向记事本发送Ctrl+S这个存盘组合键。
第一部分:定义了脚本中需要用到的变量和对象。"AutoSaveTime"变量用来设置自动存盘间隔,单位为毫秒,这里设置为5分钟。"TXTFileName"变量通过输入框取得你要创建的文本文件名称。
第二部分:运行记事本,对于Windows本身提供的程序,比如计算器等,可直接在"WshShell.Run"后输入程序名称,如"calc"对于非系统程序,则可输入完全路径,但要注意使用8。3格式输入,比如""D:\Progra~1\Tencent\QQ。exe""
第三部分:这里用SendKeys命令执行了这样的操作流程(请注意每个操作之间延时命令的使用):
在记事本中按Ctrl+S组合键→弹出保存文件的窗口→输入文件名→按Alt+S组合键进行保存(默认保存在"我的文档"目录)。
第四部分:定时存盘的关键,通过"While......Wend"这个当条件为"真"时循环命令,实现自动存盘代码"WshShell.SendKeys"^s""和定时代码"WScript.SleepAutoSaveTime"的重复执行。因为不能让这个定时存盘循环一直执行,退出记事本后,必须自动退出脚本并结束循环,所以设计了一个循环判断条件"WshShell.AppActivateTXTFileName=True",当记事本运行中时,可以激活记事本窗口,这个条件运行结果为"True",定时存盘循环一直执行,退出记事本后,脚本无法激活记事本窗口,就会路出循环,执行"Wend"后面的"WScript.Quit"退出脚本。
'第一部分:定义变量和对象 DimWshShell,AutoSaveTime,TXTFileName AutoSaveTime=1000*60*5 SetWshShell=WScript.CreateObject("WScript.Shell") TXTFileName=InputBox("请输入你要创建的文件名(不能用中文和纯数字):") '第二部分:打开并激活记事本 WshShell.Run"notepad" WScript.Sleep200 WshShell.AppActivate"无标题-记事本" '第三部分:用输入的文件名存盘 WshShell.SendKeys"^s" WScript.Sleep300 WshShell.SendKeysTXTFileName WScript.Sleep300 WshShell.SendKeys"%s" WScript.SleepAutoSaveTime '第四部分:自动定时存盘 WhileWshShell.AppActivate(TXTFileName)=True WshShell.SendKeys"^s" WScript.SleepAutoSaveTime Wend WScript.Quit
附:VBS中Sendkey键盘对应的码表
Key Code
------------------------------
Shift +
Ctrl ^
Alt %
BACKSPACE {BACKSPACE},{BS},or{BKSP}
BREAK {BREAK}
CAPSLOCK {CAPSLOCK}
DELorDELETE{DELETE}or{DEL}
DOWNARROW {DOWN}
END {END}
ENTER {ENTER}or~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INSorINSERT{INSERT}or{INS}
LEFTARROW {LEFT}
NUMLOCK {NUMLOCK}
PAGEDOWN {PGDN}
PAGEUP {PGUP}
PRINTSCREEN {PRTSC}
RIGHTARROW {RIGHT}
SCROLLLOCK {SCROLLLOCK}
TAB {TAB}
UPARROW {UP}
F1{F1}
F2{F2}
F3{F3}
F4{F4}
F5{F5}
F6{F6}
F7{F7}
F8{F8}
F9{F9}
F10{F10}
F11{F11}
F12{F12}
F13{F13}
F14{F14}
F15{F15}
F16{F16}