<output id="os3gq"><ruby id="os3gq"></ruby></output>

    1. <mark id="os3gq"></mark>
    2. 【Access源碼】判斷是否掃碼槍輸入的通用函數源碼分享-紅塵如煙
      Access軟件網QQ交流學習群(群號碼198465573),歡迎您的加入!
      首頁 >技術文章> Access數據庫-模塊/函數/VBA


      【Access源碼】判斷是否掃碼槍輸入的通用函數源碼分享

      發表時間:2019/2/28 11:21:19 評論(3) 瀏覽(10076)  評論 | 加入收藏 | 復制
         
      摘 要:翻到曾經的一個存貨,做了一些修改和完善分享出來給大家參考,有用得到的人請自取。
      正 文:

      現在在倉庫管理,超市販售等場合,掃碼槍等掃碼輸入設備已經成了必不可少的工具,基本上不再需要人工去輸入商品編碼了。


      那么我們在用Access開發軟件時,能和掃碼槍結合使用嗎?答案是肯定的。實際上絕大部分掃碼槍的原理,都是用的模擬鍵盤輸入,也就是說只要能用鍵盤,掃碼槍就能用。但你用Access開發的軟件不能用鍵盤嗎?絕對不可能嘛!


      是否掃碼槍掃碼輸入判別原理:

      由于很多掃碼槍是通過模擬鍵盤的方式進行輸入,因此難以直接從輸入來源判斷。但是因為掃描輸入間隔短而規律,手工輸入間隔長短不一,所以通過判斷按鍵之間的間隔時間來判斷,是相對可行和可靠的方案。


      在本示例中,我將基于此原理的判斷功能封裝為一個通用的函數 IsScannerInput 方便大家調用。


      如果你對VBA編程完全熟悉了,可以直接看下面的函數源代碼即可,當然也可以下載文末的示例附件。


      函數源碼:

      'Win32API函數聲明
      '獲取開機到現在過去的時間(此Win32 API函數可以精確到毫秒數)
      Public Declare Function ApiGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long 
      '========================================================================================
      '函數名稱: IsScannerInput
      '用途說明: 用于判斷是否使用掃碼槍等掃描設備輸入。在輸入框KeyDown事件中調用。
      '輸入參數: KeyCode          輸入框KeyDown事件的KeyCode參數,傳址調用。
      '           KeyPressInterval 掃描設備輸入時兩次按鍵的最大間隔時間。
      '           RepeatCount      連續按鍵次數,通過判斷連續多次的按鍵間隔時間,以增加準確度。
      '           EndKeyCode       掃描設備輸入結束標志字符,一般情況下默認是回車鍵,但在設備上
      '                            應該是可以通過跳線或開關進行設置的。
      '返 回 值: 當捕獲到輸入結束標志字符(一般是回車)時,如果前面RepeatCount個字符的輸入間隔
      '           滿足,則返回True,否則返回False。
      '作    者: 紅塵如煙 2012-02-14
      '修    改: 紅塵如煙 2019-01-23
      '注意事項: 很多掃描槍是通過模擬鍵盤的方式進行輸入,因此難以直接從輸入來源判斷。此函數的判
      '           斷原理,是通過判斷按鍵之間的間隔,掃描輸入間隔短而規律,手工輸入間隔長短不一。
      '========================================================================================
      Public Function IsScannerInput _
          ( _
                ByRef KeyCode As Integer _
              , Optional KeyPressInterval As Long = 100 _
              , Optional RepeatCount As Long = 5 _
              , Optional EndKeyCode As Integer = vbKeyReturn _
          ) As Boolean
          Static slngKeyPressTime(255) As Long
          IsScannerInput = False
          slngKeyPressTime(RepeatCount - 1) = slngKeyPressTime(RepeatCount)
          slngKeyPressTime(RepeatCount) = ApiGetTime()
          Dim lngI As Long
          For lngI = 1 To RepeatCount - 2
              slngKeyPressTime(lngI) = slngKeyPressTime(lngI + 1)
          Next
          If KeyCode = EndKeyCode Then
              Dim blnScanMode As Boolean: blnScanMode = True
              For lngI = 1 To RepeatCount - 1
                  If slngKeyPressTime(lngI + 1) - slngKeyPressTime(lngI) > KeyPressInterval Then
                      blnScanMode = False
                      Exit For
                  End If
              Next
              If blnScanMode Then
                  KeyCode = 0
                  IsScannerInput = True
              End If
          End If
      End Function

      附   件:

      點擊下載示例附件



      Access軟件網交流QQ群(群號:198465573)
       
       相關文章
      用access控制掃描儀,攝像頭  【蔣震宇  2008/7/1】
      非接觸式ic卡讀卡器的操作  【在水一方  2016/4/18】
      【Access示例】二維碼\二維碼的使用\QRmaker控件   【繆煒  2017/3/6】
      使用QRmaker控件打印二維碼示例  【MDZZ  2017/8/14】
      讀取身份證卡信息,VBA API 身份證讀卡器 調用  【litao  2018/12/1】
      自己開發的access程序調用bartender自動生成二維碼、條...  【水若寒  2018/12/5】
      也談程序調用bartender自動生成二維碼、條形碼并打印標簽  【老季  2018/12/6】
      在窗體、報表中顯示二維碼  【易勛  2019/2/8】
       
       訪客評論
      2019/8/15張俊
      厲害了

      2019/5/16
      在附件中采用掃碼槍和鍵盤輸入沒有看到任何有差異的結果輸出啊,另外對于KeyCode參數該如何設置也不是很明白?

      2019/5/16
      這個沒看明白,用掃碼槍輸入和用鍵盤輸入在這個附件中沒有任何差異啊

      總記錄:3篇  頁次:1/1 9 1 :
       
       發表評論
      評論內容 (必填)

      常見問答
      技術分類
      相關資源
      文章搜索
      關于作者

      紅塵如煙

      文章分類

      文章存檔

      友情鏈接
       
         
      湖北11选5