vb键盘拦截

vb键盘拦截

我们知道,在一些程序中,有一些快捷方式(如:shift键最小化、esc键退出、ctrl+s存盘、alt+x退出等等)。以前有一些介绍使用win32api可以做到,但过于繁琐,其实vb本身已经给我们提供了这个功能。

我们来新建一个窗体form1,对于键盘操作可以看到有三个事件keypress,keydown和keyup,下面我对它们分别介绍:

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

语法

privatesubobject_keypress([indexinteger,]keyasciiinteger)

keypress事件语法包含下列部分:

部分描述

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

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

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

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

说明

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

可使用下列表达式将keyascii参数转变为一个字符:

chr(keyascii)

然后执行字符串操作,并将该字符反译成一个控件可通过该表达式解释的ansi数字:

keyascii=asc(char)

在keypress处理不了的功能可以由keydown和keyup事件来处理:

语法

privatesubobject_keydown([indexinteger,]keycodeinteger,shiftinteger)

privatesubobject_keyup([indexinteger,]keycodeinteger,shiftinteger)

keydown和keyup事件包括下列部分:

部分描述

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

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

keycode是一个键代码,诸如vbkeyf1(键)或vbkeyhome(home键)。

shift是在该事件发生时响应shift,ctrl和alt键的状态的一个整数。shift、ctrl、alt键在这些位分别对应于值1、2和4。例如:如果ctrl和alt这两个键都被按下,则shift的值为6。

说明

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

下列情况不能引用keydown和keyup事件:窗体有一个orgmandbutton控件,并且default属性设置为true时的enter键。窗体有一个orgmandbutton控件,并且cancel属性设置为true时的esc键、tab键,keydown和keyup用两种参数解释每个字符的大写形式和小写形式:keycode—显示物理的键(将a和a作为同一个键返回)和shift—显示shift+key键的状态而且返回a或a其中之一。

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

常数值描述

vbshiftmask1hift键的位

屏蔽。

vbctrlmask2ctrl键的

位屏蔽。

vbaltmask4alt键的位

屏蔽。

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

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

了解了以上知识,我们可以制作出非常完美而且带有快捷键的程序,例如我们在一个程序中要用ctrl+s存盘,shift最小化,alt+x和esc退出:

首先启动vb选择新建exe文件,在form1窗体上拉一个textbox,并把form1的keypreview属性设为true,双击form1,选择form的keypress事件,输入如下代码:

privatesubform_keypress(keyasciiinteger)'esc键退出,vbescape可以用27代替

keyascii=vbescapethenend

endsub

在form的keydown事件中输入如下代码:

privatesubform_keydown(keycodeinteger,shiftinteger)'处理ctrl+x,shift,alt+x

shift=2andkeycode=vbkeysthenprint#filenum,bxwx.org'ctrl+s存盘,vbkeys=83

shift=bxwx.org=1'shift最小化

shift=4andkeycode=vbkeyxthenend'alt+x退出,vbkeyx=88

endsub

在form的load事件中输入如下代码:

privatesubform_load

dimfilenuminteger

filenum=freefilbxwx.org+“\bxwx.org"forappend#filenum

endsub

运行它就可以实现我们所要求的功能了,举这个例子只是抛砖引玉的作用,利用它我们还可以编写

上一章书籍页下一章

super红客

···
加入書架
上一章
首頁 都市青春 super红客
上一章下一章

vb键盘拦截

%