VB 编程中 SendKeys 语句的妙用

原文出处http://www.why100000.com/_zhan_zhang_zhuan_qu/my_articles/2001/vb_sendkeys.htm

 

在 VB 编程中有一些大家不太常用的语句,似乎已经被大家忘记了。实际上巧妙应用这些语句常常可以制做出意想不到的效果来。比方 SendKeys 语句,它的功能是将按键消息发送到活动窗口,就如同在键盘上进行输入一样。它的语法格式为:
      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

你可能感兴趣的:(学习笔记)