• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB編寫鍵盤攔截程序

    發布: 2007-5-25 09:19 | 作者: gnuljf | 來源: 互聯網 | 查看: 58次 | 進入軟件測試論壇討論

    領測軟件測試網  

    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,則一個窗體先于該窗體上的控件接收到此事件?捎 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
      運行它就可以實現我們所要求的功能了,舉這個例子只是拋磚引玉的作用,利用它我們還可以編寫

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>