网站运营 | 站长学院 | 技术文档 | 成语 | 歇后语 | 桌面壁纸 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论

用VB编写键盘拦截程序

【 本站原创作者:佚名 更新时间:2003-10-24 | 字体:
[导读]我们知道,在一些程序中>,有一些快捷方式(如:Shift键最小化>、ESC键退出、Ctrl+S存盘、Alt+x退出等等)。以前有一些介绍使用Win32 API可以做到>,但过于繁琐>,其实VB本身已经给我们提供了这个功能?<! ∥颐抢葱陆ㄒ?..
我们知道,在一些程序中>,有一些快捷方式(如: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,则一个窗体先于该窗体上的控件接收到此事件>??捎肒eyPreview属性来创建全局键盘处理例程>。

  了解了以上知识>,我们可以制作出非常完美而且带有快捷键的程序,例如我们在一个程序中要用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
友荐云推荐
  • 转载请注明来源:网站运营 网址:http://www.chinawobo.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载<,但请务必注明出处和原始作者>>。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
RSS订阅
  • QQ邮箱
  • 填写您的邮件地址>,订阅我们的精彩内容:
更多
© 2014 网站运营 - T086.com(原itlearner.com)
微商货源 | 冠珠陶瓷 | 迪威乐云商devmsn | 易奇八字 | wwe美国职业摔角 | 八字算命 | 河南旅游景点大全 |
RunTime:14.60ms QueryTime:7