加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用VB编写键盘拦截程序[转]

发布时间:2020-12-16 23:32:45 所属栏目:大数据 来源:网络整理
导读:我们知道,在一些程序中,有一些快捷方式(如:Shift键最小化、ESC键退出、Ctrl+S存盘、Alt+x退出等等)。以前有一些介绍使用Win32API可以做到,但过于繁琐,其实VB本身已经给我们提供了这个功能。 我们来新建一个窗体Form1,对于键盘操作可以看到有三个事件

我们知道,在一些程序中,有一些快捷方式(如:Shift键最小化、ESC键退出、Ctrl+S存盘、Alt+x退出等等)。以前有一些介绍使用Win32API可以做到,但过于繁琐,其实VB本身已经给我们提供了这个功能。   我们来新建一个窗体Form1,对于键盘操作可以看到有三个事件KeyPress(),KeyDown和KeyUp,下面我对它们分别介绍:   KeyPress()事件是当用户按下和松开一个ANSI键时发生(ANSI是可见ASCII字符1-127)。   语法   PrivateSubobject_KeyPress([indexAsInteger,]keyasciiAsInteger)   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()事件来处理:   语法   PrivateSubobject_KeyDown([indexAsInteger,]keycodeAsInteger,shiftAsInteger)   PrivateSubobject_KeyUp([indexAsInteger,shiftAsInteger)   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常数。该常数有下列值:   常数值描述   vbShiftMask1HIFT键的位   屏蔽。   VbCtrlMask2CTRL键的   位屏蔽。   VbAltMask4ALT键的位   屏蔽。   该常数用作位屏蔽,它可被用来测试任何键组合。   注意:如果KeyPreview属性被设置为True,则一个窗体先于该窗体上的控件接收到此事件。可用KeyPreview属性来创建全局键盘处理例程。   了解了以上知识,我们可以制作出非常完美而且带有快捷键的程序,例如我们在一个程序中要用Ctrl+S存盘,Shift最小化,Alt+X和ESC退出:   首先启动vb选择新建EXE文件,在Form1窗体上拉一个TextBox,并把Form1的KeyPreview属性设为True,双击Form1,选择Form的KeyPress事件,输入如下代码:   PrivateSubForm_KeyPress(KeyAsciiasInteger)'Esc键退出,VbEscape可以用27代替   IfKeyAscii=VbEscapethenEnd   EndSub   在Form的KeyDown事件中输入如下代码:   PrivateSubForm_KeyDown(KeyCodeasInteger,ShiftasInteger)'处理Ctrl+X,Shift,Alt+X   IfShift=2AndKeyCode=VbKeySThenPrint#FileNum,Form1.Text1.Text'Ctrl+S存盘,VbKeyS=83   Ifshift=2thenForm1.WindowState=1'Shift最小化   IfShift=4AndKeyCode=VbKeyXThenEnd'Alt+X退出,VbkeyX=88   EndSub   在Form的Load事件中输入如下代码:   PrivateSubForm_load()   DimFileNumasinteger   FileNum=FreeFile   OpenApp.Path+“/Sample.txt"ForAppendAs#FileNum   EndSub   运行它就可以实现我们所要求的功能了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读