IT学习者 | 文章大全 | 技术文档 | 桌面壁纸 | 实用查询 | 网络电台 | 成语 | 歇后语 | 网址 | 下载 | 周公解梦 | 生日密码 | 电视剧365 | Flash
 您现在的位置: IT学习者 >> 文章大全 >> 网络编程 >> VB学习

用VB编写键盘拦截程序

【 来源:本站原创  更新时间:2003-10-24 | 字体:
我们知道,在一些程序中,有一些快捷方式(如:Shift键最小化、ESC键退出、Ctrl+S存盘、Alt+x退出等等)。以前有一些介绍使用Win32 API可以做到,但过于繁琐,其实VB本身已经给我们提供了这个功能。

  我们来新建一个窗体Form1,对于键盘操作可以看到有三个事件KeyPress(),KeyDown和KeyUp,下面我对它们分别介绍:

  KeyPress()事件是当用户按下和松开一个ANSI键时发生(ANSI是可见ASCII字符1-127)。

  语法   Private Sub object_KeyPress([index As Integer,]keyascii As Integer)   KeyPress事件语法包含下列部分:

  部分描述

  object一个对象表达式,其值是"应用于"列表中的一个对象。

  index一个整数,它用来唯一标识一个在控件数组中的控件(仅有控件数组时才有)。

  keyascii是返回一个标准数字ANSI键代码的整数。Keyascii通过引用传递,对它进行改变可给对象。

  发送一个不同的字符。将keyascii改变为0时可取消击键,这样一来对象便接收不到字符。

  说明

  具有焦点的对象接收该事件。一个窗体仅在KeyPreview属性被设置为True时才能接收该事件。一个KeyPress事件可以引用任何可打印的键盘字符,一个来自标准字母表的字符或少数几个特殊字符之一的字符与CTRL键的组合,以及ENTER或BACKSPACE键。KeyPress()事件过程在截取TextBox或ComboBox控件所输入的击键时是非常有用的。它可立即测试击键的有效性或在字符输入时对其进行格式处理。改变keyascii参数的值会改变所显示的字符。

  可使用下列表达式将keyascii参数转变为一个字符:   Chr(KeyAscii)   然后执行字符串操作,并将该字符反译成一个控件可通过该表达式解释的ANSI数字:   KeyAscii = Asc(char)   在KeyPress()处理不了的功能可以由KeyDown()和KeyUp()事件来处理:   语法   Private Sub object_KeyDown([index As Integer,]keycode As Integer, shift As Integer)   Private Sub object_KeyUp([index As Integer,]keycode As Integer, shift As Integer)   KeyDown和KeyUp事件包括下列部分:   部分描述   object一个对象表达式,其值是"应用于"列表中的一个对象。   index是一个整数,它用来唯一标识一个在控件数组中的控件(仅有控件数组时才有)。   keycode是一个键代码,诸如vbKeyF1(F1键)或vbKeyHome(HOME键)。   shift是在该事件发生时响应SHIFT ,CTRL和ALT键的状态的一个整数。shift、CTRL、ALT键在这些位分别对应于值1、2和4。例如:如果CTRL和ALT这两个键都被按下,则shift的值为6。

  说明

  对于这两个事件来说,带焦点的对象都接收所有击键。一个窗体只有在不具有可视的和有效的控件时才可以获得焦点。虽然KeyDown()和KeyUp()事件可应用于大多数键,它们最经常地还是应用于:扩展的字符键如功能键、定位键、键盘修饰键和按键的组合、区别数字小键盘和常规数字键;在需要对按下和松开一个键都响应时,可使用KeyDown和KeyUp事件过程。

  下列情况不能引用KeyDown和KeyUp事件:窗体有一个CommandButton控件,并且Default属性设置为True时的ENTER键。窗体有一个CommandButton控件,并且Cancel属性设置为True时的ESC键、TAB键,KeyDown和KeyUp用两种参数解释每个字符的大写形式和小写形式:keycode-显示物理的键(将A和a作为同一个键返回)和shift-显示shift+key键的状态而且返回A或a其中之一。

  如果需要测试shift参数,可使用该参数中定义各位的shift常数。该常数有下列值:

  常数值描述

  vbShiftMask 1 HIFT键的位

  屏蔽。

  VbCtrlMask 2 CTRL键的

  位屏蔽。

  VbAltMask 4 ALT键的位

  屏蔽。

  该常数用作位屏蔽,它可被用来测试任何键组合。

  注意:如果KeyPreview属性被设置为True,则一个窗体先于该窗体上的控件接收到此事件。可用KeyPreview属性来创建全局键盘处理例程。

  了解了以上知识,我们可以制作出非常完美而且带有快捷键的程序,例如我们在一个程序中要用Ctrl+S存盘,Shift最小化,Alt+X和ESC退出:

  首先启动vb选择新建EXE文件,在Form1窗体上拉一个TextBox,并把Form1的KeyPreview属性设为True,双击Form1,选择Form的KeyPress事件,输入如下代码:   Private Sub Form_KeyPress(KeyAscii as Integer) 'Esc键退出,VbEscape可以用27代替   If KeyAscii=VbEscape then End   End Sub   在Form的KeyDown事件中输入如下代码:   Private Sub Form_KeyDown(KeyCode as Integer,Shift as Integer) '处理Ctrl+X,Shift,Alt+X   If Shift=2 And KeyCode=VbKeyS Then Print#FileNum,Form1.Text1.Text 'Ctrl+S存盘,VbKeyS=83   If shift=2 then Form1.WindowState=1 'Shift最小化   If Shift=4 And KeyCode=VbKeyX Then End 'Alt+X退出,VbkeyX=88   End Sub   在Form的Load事件中输入如下代码:   Private Sub Form_load()   Dim FileNum as integer   FileNum=FreeFile   Open App.Path+"\Sample.txt" For Append As#FileNum   End Sub
相 关 文 章
相 关 软 件
没有相关下载
逃生 放生 黄玫瑰 想太多 那滋味 擦肩而过 放手去爱 北京欢迎你 依然在一起 吻得太逼真 感动天感动地 坐上火车去拉萨 怎么会狠心伤害我
心碎 冲动 小太阳 别碰我 蒲公英 千山万水 改变自己 一定要爱你 等爱的玫瑰 陷入爱里面 北极星的眼泪 最后一次的温柔 亲爱的那不是爱情
光荣 火花 坏女人 日不落 樱花草 为你写诗 独家记忆 夏天的味道 寂寞才说爱 忘不掉的伤 爱上你是个错 第三者的第三者 地球人都知道我爱你
假如 相思 是非题 有缘人 舍不得 我的答铃 死而无憾 外滩十八号 越爱越难过 123木头人 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错
加入收藏留言建议自助友情链接普通友情链接站长的Blog
版权所有   COPYRIGHT 2002-2008 ★IT学习者★ ALL RIGHTS RESERVED.