【问题标题】:VB6 Check which keyboard is typing [BARCODE SCANNER]VB6 检查哪个键盘正在输入 [BARCODE SCANNER]
【发布时间】:2018-04-03 18:08:48
【问题描述】:

我有一台带有 USB 键盘和 USB 条形码扫描仪的计算机,它可以以非常快的击键速度发送读取的代码。

现在我的应用是一个 100% 的键盘记录器,但我想将 USB 键盘与条形码扫描仪区分开来,只将条形码发送到键盘记录器。

这是我正在使用的代码。

声明

Private Declare Function SetWindowsHookEx Lib "user32.dll" _
    Alias "SetWindowsHookExA" (ByVal idHook As Long, _
                                ByVal lpfn As Long, _
                                ByVal hmod As Long, _
                                ByVal dwThreadId As Long) As Long

Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long

Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal hHook As Long, _
                                                          ByVal nCode As Long, _
                                                          ByVal wParam As Long, _
                                                          ByRef lParam As Any) As Long

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, _
                                                                         ByRef Source As Any, _
                                                                         ByVal Length As Long)

Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer

Private Const WH_KEYBOARD_LL As Long = 13

Public Type KBDLLHOOKSTRUCT
    VkCode As Long
    ScanCode As Long
    Flags As Long
    Time As Long
    DwExtraInfo As Long
End Type

Dim KBHook As Long
Dim KeyData As String

Public Sub main()
    ManageKeylogger True
End Sub

键盘挂钩

Public Sub ManageKeylogger(ByVal Enable As Boolean)
    Select Case Enable
        Case True
            KBHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KBProc, App.hInstance, 0)
        Case False
            Call UnhookWindowsHookEx(KBHook)
    End Select
End Sub

键盘回调方法

Public Function KBProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
    Dim KeyBoardHook As KBDLLHOOKSTRUCT

    If nCode = 0 Then
        CopyMemory KeyBoardHook, lParam, Len(KeyBoardHook)
        With KeyBoardHook
            If .Flags = 0 Or .Flags = 1 Then
                If SaveLog(TranslateKey(.VkCode)) > 0 Then
                    Call LogToFile(App.Path & "\Log.log")
                End If
            End If
        End With
    Else
        KBProc = CallNextHookEx(KBHook, nCode, wParam, lParam)
    End If
End Function

关键翻译

Private Function TranslateKey(ByVal KeyCode As Long) As String
'stuff
End Function

日志

Public Function SaveLog(ByVal sKey As String) As Double
    KeyData = KeyData & sKey
    SaveLog = Len(KeyData)
End Function

Public Sub LogToFile(ByVal sPath As String)
    Open sPath For Binary As #1
        Put #1, , KeyData
    Close #1
End Sub

【问题讨论】:

标签: keyboard vb6 hook barcode reader


【解决方案1】:

我对以回车结束的条形码输入做了类似的处理。

  1. 首先创建一个全局变量,用于跟踪 Timer 中的值(自午夜以来经过的秒数)。对于同样的 在这个示例中,我们将其命名为 StartOfInput。
  2. 将 StartOfInput 设置为 0。
  3. 当您在文本输入中收到一个字符时,请检查是否 StartOfInput 为零。如果是,则将当前 Timer 值保存到 开始输入。
  4. 后续字符输入不会更改该值, 因为只有在 StartOfInput 为零时才会更改。
  5. 当您收到回车符(或其他任何用于条形码扫描仪的可邮寄)时,您将比较当前值的差异 计时器以查看它是否小于 StartOfInput 某个阈值。 例如,如果您的用户能够在 1 中输入 30 个字符 第二?不太可能,但条形码扫描仪可以。

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2012-09-10
    • 2016-11-06
    相关资源
    最近更新 更多