1.我知道2,3的十六进制码分别是,&h40和&h23,但是@ ,#十六进制码是多少?我键盘记录时显示始终是2和好.2.左右shift键十六进制码?Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim p As PKBDLLHOOKSTRUCT
Dim strKey As StringIf ncode = HC_ACTION Then
    Select Case wParam
        Case WM_KEYDOWN
            CopyMemory p, ByVal lParam, Len(p)           
            If p.VKCode > 0 And p.VKCode < &H92 Then            
                Select Case p.VKCode
                   Case VK_RETURN
                      'strKey = strKey & "{Return}"    
                   Case &H30 To &H39, &H40 To &H5A    ' 含&H40 @
         
                       strKey = strKey & Chr(p.VKCode)
                   Case &H23                            ' 含&H23 #
                       strKey = strKey & Chr(p.VKCode)
                   
                   Case Else
                       'do nothing
                End Select
                form.txtSS.Text = form.txtSS.Text & strKey
            End If
            
        Case Else
            'do nothing
    End Select
End IfCallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParamIf p.VKCode = VK_RETURN Then
   strSN = Trim(form.txtSS)
   form.txtSS.Text = ""
End IfEnd Function

解决方案 »

  1.   

    实际上我想在form.txtSS文本框看到它显示的是@和#,但是我看到的一直是2和3.
      

  2.   

    我说的'  @ 对应 &H40 
          '  # 对应 &H23 
    是键盘对应的十六进制码值!楼上可能没有理解我的意思!
      

  3.   

    楼主先要搞清楚 啥叫键盘扫描码 啥叫ASC码
    2 和 @ 是1个键位  但是要输入 @ 还要先按SHIFT 你这个SHIFT键码没有记录 得到的当然是2
      

  4.   

    向楼上请教:
    我刚试过,加了左右shift键的ASC码!但是还是不行.
    能不能给段源码?比如显示!,@,#,$,%,^,&,*,中的任何一个!
    谢谢
      

  5.   

    form.txtSS.Text = form.txtSS.Text & strKey
    这句本身就不能这么写
    扫描码<>ASC码
      

  6.   

    我这边有两种厂商的扫描枪,一种扫描枪自动设置有@,#符号!
    我的目的主要是记录COM口(扫描枪和键盘同为COM口),但是由于扫描枪中含有!,@,#,$,%,^,&,*,这些符号,我想通过程序记录这些符号(所有键盘操作)以后再过滤掉这些符号(@,#)
    如:replace(strsn,"@","")
    再进行下一步的判断.实际上我无法在程序文本框里面对这些符号@,#进行拦截.另外:我理解扫描码<>ASC码,
    &H30 To &H39, &H40 To &H5A ......
    这些只是通过键盘HOOK记录键盘每一个按钮的十六进制值!
      

  7.   


    form.txtSS.Text = form.txtSS.Text & strKey
    这句本身就不能这么写
    扫描码<>ASC码-------你可以给一段你的写法,不过我这样写记录键盘数字和字母是正确的,已调试.
      

  8.   

    那时因为仅仅数字和字母的扫描码=ASC码 假如你用小键盘输入数字一定又不对了吧 鉴于你仅仅出现 数字+字母+[1~8]的上档按键 也就是!@#$%^&* 这些添加 API 定义 
    Private   Declare   Function   GetKeyState   Lib   "user32"   Alias   "GetKeyState"   (ByVal   nVirtKey   As   Integer)   As   Integer
     
    然后修改你原先代码
        
     form.txtSS.Text = form.txtSS.Text & strKey
    改为
    if getkeystate(16)>0 then 
      strKey=mid("!@#$%^&*",strKey,1)
    endif
     form.txtSS.Text = form.txtSS.Text & strKey