欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

VBS基础篇 vbscript Sendkeys模拟键盘操作

程序员文章站 2022-03-07 15:10:12
模拟键盘操作,将一个或多个按键指令发送到指定windows窗口来控制应用程序运行 其使用格式为:object.sendkeys(string) object:表示wsh...

模拟键盘操作,将一个或多个按键指令发送到指定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 "{x 10}"”即可

接下来看一下实例:

  按下f5刷新桌面

dim wshshell,path,i
set wshshell = wscrpt.createobject("wscrpt.shell")
wshshell.sendkeys "{f5}"

电脑的自动重启

dim wshshell
set wshshell = createobject("wscrpt.shell")
wshshell.sendkeys "^{esc}u"
wshshell.sendkeys "r"

启动任务管理器

dim wshshell
set wshshell = createobject("wscrpt.shell")
wshshell.sendkeys "^+{esc}" 

自动关机

dim wshshell
set wshshell=wscrpt.createobject("wscrpt.shell")
wscrpt.sleep 2000
wshshell.run "shutdown -r -t 120"
wscrpt.sleep 6000
wshshell.run "shutdown -a" 

在记事本中输入happy birthday!并保存为birth.txt

dim wshshell
set wshshell=wscrpt.createobject("wscrpt.shell")
wshshell.run "notepad"
wscrpt.sleep 1500
wshshell.appactivate "ξ? - ?±"
wshshell.sendkeys "happy birthdy!!!"
wscrpt.sleep 500
wshshell.sendkeys "%fs"
wscrpt.sleep 500
wshshell.sendkeys "birth.txt"
wscrpt.sleep 500
wshshell.sendkeys "%s"
wscrpt.sleep 500
wshshell.sendkeys "%fx" 

简单地说,sendkey 这个命令就是模拟键盘操作,将一个或多个按键指令发送到指定windows窗口来控制应用程序运行,其使用格式为:

    wshshell.sendkeys string    “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 "{x 10}" 即可。

 让vbs脚本自动在记事本中输入一行文字"hello, welcome to jb51.net"。

dim wshshell
set wshshell=wscript.createobject("wscript.shell")
wshshell.run "notepad"
wscript.sleep 200
wshshell.appactivate " 无标题 - 记事本 "
wshshell.sendkeys "hello, welcome to jb51.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.sleep autosavetime "的重复执行。因为不能让这个定时存盘循环一直执行,退出记事本后,必须自动退出脚本并结束循环,所以设计了一个循环判断条件" wshshell.appactivate txtfilename=true ",当记事本运行中时,可以激活记事本窗口,这个条件运行结果为"true",定时存盘循环一直执行,退出记事本后,脚本无法激活记事本窗口,就会路出循环,执行"wend"后面的"wscript.quit"退出脚本。

'第一部分:定义变量和对象
dim wshshell, autosavetime, txtfilename
autosavetime=1000*60*5
set wshshell=wscript.createobject("wscript.shell")
txtfilename=inputbox("请输入你要创建的文件名(不能用中文和纯数字):")

'第二部分:打开并激活记事本
wshshell.run "notepad"
wscript.sleep 200
wshshell.appactivate "无标题 - 记事本"

'第三部分:用输入的文件名存盘
wshshell.sendkeys "^s"
wscript.sleep 300
wshshell.sendkeys txtfilename
wscript.sleep 300
wshshell.sendkeys "%s"
wscript.sleep autosavetime

'第四部分:自动定时存盘
while wshshell.appactivate (txtfilename)=true
wshshell.sendkeys "^s"
wscript.sleep autosavetime
wend
wscript.quit

 附:vbs中sendkey键盘对应的码表

key   code
------------------------------
shift     +
ctrl     ^
alt     %
backspace    {backspace}, {bs}, or {bksp}
break     {break}
caps lock    {capslock}
del or delete {delete} or {del}
down arrow    {down}
end      {end}
enter     {enter}or ~
esc      {esc}
help      {help}
home      {home}
ins or insert {insert} or {ins}
left arrow     {left}
num lock     {numlock}
page down     {pgdn}
page up     {pgup}
print screen    {prtsc}
right arrow    {right}
scroll lock    {scrolllock}
tab     {tab}
up arrow    {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}