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
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
解决方案 »
- VB下面怎么样制作机器人
- vb sql 查询 如何在where 后面附加两个条件? 分别是 数据列 xl 等于数据 a(i) 和 cl 列等于 b(i,j)
- 怎么校验MSFlexGrid中输入的数据是否有效????
- recordset出错
- 有关于提高数据库存取效率的问题。高手请指教,新手请欣赏!
- 怎么将execl2000的文件转换成access2000的文件????
- 关于TreeView的一个小问题
- 怎么读取Excel文件里所有单元格的内容
- 看我说的对不对,请各位指点
- 当运行其他程序的时候,如何让让我的程序窗体不被最小化?正常显示在屏幕上?
- vb中如何求一个矩阵的逆矩阵
- 我的程序应该怎么改?如何实现"打开对话框"那样,窗体以外部分不接受操作?
' # 对应 &H23
是键盘对应的十六进制码值!楼上可能没有理解我的意思!
2 和 @ 是1个键位 但是要输入 @ 还要先按SHIFT 你这个SHIFT键码没有记录 得到的当然是2
我刚试过,加了左右shift键的ASC码!但是还是不行.
能不能给段源码?比如显示!,@,#,$,%,^,&,*,中的任何一个!
谢谢
这句本身就不能这么写
扫描码<>ASC码
我的目的主要是记录COM口(扫描枪和键盘同为COM口),但是由于扫描枪中含有!,@,#,$,%,^,&,*,这些符号,我想通过程序记录这些符号(所有键盘操作)以后再过滤掉这些符号(@,#)
如:replace(strsn,"@","")
再进行下一步的判断.实际上我无法在程序文本框里面对这些符号@,#进行拦截.另外:我理解扫描码<>ASC码,
&H30 To &H39, &H40 To &H5A ......
这些只是通过键盘HOOK记录键盘每一个按钮的十六进制值!
form.txtSS.Text = form.txtSS.Text & strKey
这句本身就不能这么写
扫描码<>ASC码-------你可以给一段你的写法,不过我这样写记录键盘数字和字母是正确的,已调试.
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