SendKeys string[, wait]
其中,string 是指定要发送的按键消息;Wait 是指定等待方式的 Boolean 值,如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程;如果为 True,则按键消息必须在控件返回到过程之前加以处理。
按键消息由一个或多个字符序列表示:键盘字符按字符本身的键表示(如对于字母 A,string="A",对连续字母 win98,string="win98"),对其它一些特殊字符,如 + 号用{+}表示,Shift 键用 + 表示,Alt 键用 % 表示,F1 键用 {F1} 表示等等,更多的按键与代码的对应关系,可参考 MSDN 的帮助信息。
明白了这些“规则”之后,我们首先来编写一个用 SendKeys 操控计算器的程序,程序代码如下:
Option Explicit
Private Sub Form_Load()
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' 运行计算器
AppActivate ReturnValue ' 激活计算器
For I = 1 To 100 ' 设置计数循环
SendKeys I & "{+}", True ' 按下按键给计算器
Next I ' 将所有 I 值相加
SendKeys "=", True ' 取得总和
SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器
End Sub
程序中 AppActivate ReturnValue 语句用来激活计算器,使其窗口获得焦点。程序运行后,我们会看到计算器的按键自动动作起来,最后计算出 1+2+3+…+100 的结果。这可不是病毒,也不是黑客啊!
怎么样,神奇吧?想没想到这可是制做演示程序的好方法!只要熟悉了某程序的键盘操作序列,就可以用程序模拟它的运行过程。下面的程序用来模拟运行安装在 D: 盘的 Word 程序,自动打出 4 行文字后,然后退出。程序中为了能仔细观察演示过程,设计了 waittime 函数来进行延时。
Option Explicit
Private Sub Form_Load()
Dim x
x = Shell("D:/Program Files/Microsoft Office/Office/winword.exe", vbNormalFocus)
'启动 Word97
SendKeys "This is a demo program for Microsoft Word97.", True ' 模拟输入英文字符串
SendKeys "{Enter}{Enter}", True ' 两次回车
waittime (2) ' 延时 2 秒
SendKeys "Some letters keyin automatically.", True
SendKeys "{Enter}{Enter}", True
waittime (2)
SendKeys "Not virus,and not hackers!", True
SendKeys "{Enter}{Enter}", True
waittime (2)
SendKeys "Being Exit... Look the MenuBar File{(}F{)}...", True
SendKeys "%", True 'Alt 键激活菜单条
waittime (1)
SendKeys "(F)", True '按字母 "F",选择"文件(F)"菜单
waittime (1)
SendKeys "(X)", True '按字母 "X", 选择"退出(X)"
waittime (2)
SendKeys "(N)", True 'Word 弹出一个对话框,询问文件是否存盘,按 "N" 不存盘
End '结束本模拟程序
End Sub
Private Sub waittime(delay As Single)
Dim starttime As Single
starttime = Timer
Do Until (Timer - starttime) > delay
Loop
End Sub
参考一下吧:
Dim
ReturnValue,
I
ReturnValue
=
Shell("Calc.EXE",
1)
'
运行计算器。
AppActivate
ReturnValue
'
激活计算器。
For
I
=
1
To
100
'
设置计数循环。
SendKeys
I
&
"{+}",
True
'
按下按键给计算器
Next
I
'
将所有
I
值相加。
SendKeys
"=",
True
'
取得总合。
SendKeys
"%{F4}",
True
'
按
ALT+F4
关闭计算器。
sendkeys "{HOME}"
sendkeys "{SCROLLLOCK}"
SendKeys 语句
[编辑本段]描述
将一个或多个按键消息发送到活动窗口,就如同用键盘进行输入一样。
[编辑本段]语法
SendKeys string[, wait]
参数意义:
string部分必需的,字符串表达式,指定要发送的按键消息。
Wait可选的,指定等待方式的值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程;如果为 True,则按键消息必须在控件返回到过程之前加以处理。说明每个按键由一个或多个字符表示。
[编辑本段]用法
1)为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母 A,可以用 "A" 作为 string。为了表示多个字符,就必须在字符后面直接加上另一个字符。例如,要表示 A、B 及 C,可用 "ABC" 作为 string。
2)对 SendKeys 来说,加号+ 、插入符^ 、百分号% 、上划线~ 及圆括号( ) 都具有特殊意义。为了指定上述任何一个字符,要将它放在大括号{}当中。例如,要指定正号,可用 {+} 表示。为了指定大括号字符,请使用 {{} 及 {}}。方括号 [ ] 对 SendKeys 来说并不具有特殊意义,但必须将它们放在大括号中。在其它应用程序中,方括号有特殊意义,在出现动态数据交换 (DDE) 的时候,它可能具有重要意义。
3)为了在按下按键时指定那些不显示的字符,例如 ENTER 或 TAB 以及那些表示动作而非字符的按键,请使用下列代码:
按键 代码
BACKSPACE {BACKSPACE}, {BS}或{BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} 或 {DEL}
ENTER {ENTER}或 ~
ESC {ESC}
NUM LOCK {NUMLOCK}
SCROLL LOCK {SCROLLLOCK}
UP ARROW {UP}
DOWN ARROW(下箭头) {DOWN}
LEFT ARROW {LEFT}
RIGHT ARROW {RIGHT}
END {END}
HOME {HOME}
INS or INSERT {INSERT} 或 {INS}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
WIN ^{ESC}
TAB {TAB}
HELP {HELP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
4)为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下:
键 代码
SHIFT +
CTRL ^
ALT %
5)为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键,请使用 "+(EC)"。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 "+EC"。
6)为了指定重复键,使用 {key number} 的形式。必须在 key 与 number 之间放置一个空格。例如,{LEFT 42} 意指 42 次按下 LEFT ARROW 键;{h 10} 则是指 10 次按下 H 键。注意 不能用 SendKeys 将按键消息发送到这样一个应用程序——这个应用程序并没有被设计成在 Microsoft Windows 中运行。
注意:Sendkeys 也无法将 PRINT SCREEN 按键发送到任何应用程序。
[编辑本段]示例
set WshShell = WScript.CreateObject("WScript.Shell") '调用
WScript.Sleep 100 '延时0.1秒
WshShell.SendKeys "ABCD" '顺序发送ABCD四个键