奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> VB >> 用VB编写键盘拦截程序
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • VB中使用WinSock控件传

  • VB API函数介绍——控

  • VB从零开始编外挂(完整

  • VB.Net实现Web Servic

  • 老树新芽 体验Visual 

  • vb中利用xmlhttp来下载

  • vb中使用正则表达式

  • ASP.NET中Cookie编程的

  • 用VB编写键盘拦截程序
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-22

        我们知道,在一些程序中,有一些快捷方式(如: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
      运行它就可以实现我们所要求的功能了

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.