当前位置:编程学习 > VB >>

VB6.0 屏蔽键盘字母键,急

  
      现在有一个项目是这样的 :

 
只允许工作人员用扫瞄枪扫瞄序列号 , 不允许工作人员手动输入字母或者数字。 我在google 上

找了很多方法 ,用钩子可以屏蔽从键盘上输入字母或者数字 。

    但是后来发现 :  扫瞄枪也不能正常用了 ,

把扫瞄枪里扫瞄的序列号也给屏蔽了 ,  这个问题怎么办啊?  急 --------------------编程问答-------------------- 把键盘拆开,数字键下加塑料垫片即可 --------------------编程问答--------------------
引用楼主 bay120 的回复:
  现在有一个项目是这样的 :

 
只允许工作人员用扫瞄枪扫瞄序列号 , 不允许工作人员手动输入字母或者数字。 我在google 上

找了很多方法 ,用钩子可以屏蔽从键盘上输入字母或者数字 。

  但是后来发现 : 扫瞄枪也不能正常用了 ,

把扫瞄枪里扫瞄的序列号也给屏蔽了 , 这个问题怎么办啊? 急
就是键盘拆了也不行吧,因为windows附件里还有个软键盘的。
不知道你这个是扫描了是录入到哪里的,打个比方,假如扫描后首先会显示到你的程序的文本框中,然后点击什么确定按钮后存入数据库或者打印什么操作的。那么把那个文本框设置为lock状态禁止键盘输入不就行了吗?如果那个程序不是你的那么另当别论了。 --------------------编程问答-------------------- 软键盘可以删除啊

引用 2 楼 sysdzw 的回复:
引用楼主 bay120 的回复:
现在有一个项目是这样的 :


只允许工作人员用扫瞄枪扫瞄序列号 , 不允许工作人员手动输入字母或者数字。 我在google 上

找了很多方法 ,用钩子可以屏蔽从键盘上输入字母或者数字 。

但是后来发现 : 扫瞄枪也不能正常用了 ,

把扫瞄枪里扫瞄的序列号也给屏蔽了 , 这个问题怎么办啊? 急
就是键盘拆了也不行吧,因为windows附……
--------------------编程问答-------------------- 全局钩子
貌似没有更好的办法 --------------------编程问答-------------------- 全局钩子 + 进程监控, 要做到把你的扫描枪这个进程给排除在外就好了吧 --------------------编程问答-------------------- 这个问题以前有个帖子是靠检查输入数据的总时间来判断的。 --------------------编程问答-------------------- 以前的贴子我答过
一般的扫描枪它就是个键盘,根本没有特殊的进程或其他啥的,最简单的办法就是判断时间,如果短时间内输入了过多字符,则认为是扫描枪输入的 --------------------编程问答-------------------- 这么巧
引用 7 楼 alifriend 的回复:
以前的贴子我答过
一般的扫描枪它就是个键盘,根本没有特殊的进程或其他啥的,最简单的办法就是判断时间,如果短时间内输入了过多字符,则认为是扫描枪输入的
--------------------编程问答-------------------- 你的录入序列号的是TextBox控件吗?如果是试一试把它的Locked属性设置为true试一试。这样可以屏蔽掉TextBox控件的键盘录入。但可以通过代码(比如你的扫描录入)输入信息 --------------------编程问答-------------------- 时间来判断,真不可靠呀, 短时间内输入大量字符, 不光扫描抢能做到.....

提供一些思路:

1. 端口的判断, 扫描抢和键盘的硬件端口是不一样的
2. 扫描抢发送的字符信息一般带有特征码,可以通过检测这个特征码来识别....接收软件怎么做,那段搞出来
--------------------编程问答-------------------- 将textbox的enabled属性设为false就可以屏蔽键盘输入了~
或者改用Label控件
再通过端口判断将扫描枪扫出来的信息显示在textbox或label控件中就可以了 --------------------编程问答-------------------- 键盘输入有WM_CHAR消息的,扫描枪的输入一定会有他特有的消息。 --------------------编程问答-------------------- http://www.cnblogs.com/lance2088/archive/2008/06/18/1224591.html
参见这个代码。扫描枪就是个键盘,不会有什么特殊的端口,特征码之类的,不过每个设备肯定有自己的keyboard handle。 --------------------编程问答-------------------- http://download.csdn.net/source/1218702
大同小异,免费的资源 --------------------编程问答-------------------- 我也遇到过类同问题。 ID卡刷卡。 最后我用时间控制了。 记录的时候计时,几秒后清空变量。因为枪扫描速度很快的。人为按的速度有一定差别。所以应该没问题。
--------------------编程问答-------------------- 拆键盘! --------------------编程问答-------------------- 以后有机会试试巫师的办法。。我认为不错 --------------------编程问答-------------------- 整天都在吃饭,突然有一天想吃汉堡,先把吃饭的事放一边。

叫人把汉堡送到家,好的开始吃咯。 --------------------编程问答-------------------- 扫描枪扫描的信息不会触发文本框的keypress事件吧?
在输入框的keypress事件中把输入框清空
或者在输入框的keyup事件中拦截输入字符
Option Explicit
Dim a As String

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
a = Text1.Text
End Sub

Private Sub Text1_KeyUp(KeyAscii As Integer)
Text1.Text = a
End Sub
--------------------编程问答-------------------- KeyBoard Global HOOK && KeyBoard Events.OKOKJOK --------------------编程问答-------------------- --------------------编程问答-------------------- 推荐使用键盘钩子:
http://topic.csdn.net/u/20110307/14/dff9d358-adfc-4871-a053-f698f28487fc.html --------------------编程问答-------------------- 如果是拒绝字母很简单了,如果是设备的话那么除非你判断设备类型,那么可以获取键盘和你扫描枪的ID号,然后判断是键盘输入还是扫描枪输入! --------------------编程问答-------------------- 在文本框中不论你按什么字母或者数字键,文本框内容不变(假如扫描枪已经有输入的话比较适合)。19楼代码错误了。
Option Explicit
Dim s As String

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
s = Text1.Text
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Text1.Text = s
End Sub

如果在keyup事件中利用KeyCode,还可以对输入按键进行判断开放特例 --------------------编程问答--------------------
引用 10 楼 csorca 的回复:
时间来判断,真不可靠呀, 短时间内输入大量字符, 不光扫描抢能做到.....

提供一些思路:

1. 端口的判断, 扫描抢和键盘的硬件端口是不一样的
2. 扫描抢发送的字符信息一般带有特征码,可以通过检测这个特征码来识别....接收软件怎么做,那段搞出来

老兄有用过吗?
我们的项目在客户那边每个终端每天平均2000次以上,从未出现不可靠的情况!请举例说明客户那边微秒级的其他输入。 --------------------编程问答--------------------
引用 7 楼 alifriend 的回复:
以前的贴子我答过
一般的扫描枪它就是个键盘,根本没有特殊的进程或其他啥的,最简单的办法就是判断时间,如果短时间内输入了过多字符,则认为是扫描枪输入的


所见略同~~ --------------------编程问答--------------------
引用 4 楼 ybh37 的回复:
全局钩子
貌似没有更好的办法

看错了!此回复无效!
--------------------编程问答-------------------- 补充:
楼主分给的太少了,我这里也有扫描枪,不知道楼主的是PS/2的还是USB得接口,我觉得楼主的问题不是太难,不需要扫描钩子。。。因为嵌入钩子的话可能造成EDIT屏蔽扫描数据。刚上面我说了,直接判断设备ID即可!如果是扫描枪=TRUE.如果是键盘=FALSE。 --------------------编程问答--------------------
引用 28 楼 wilders 的回复:
补充:
楼主分给的太少了,我这里也有扫描枪,不知道楼主的是PS/2的还是USB得接口,我觉得楼主的问题不是太难,不需要扫描钩子。。。因为嵌入钩子的话可能造成EDIT屏蔽扫描数据。刚上面我说了,直接判断设备ID即可!如果是扫描枪=TRUE.如果是键盘=FALSE。

++ --------------------编程问答--------------------
引用 28 楼 wilders 的回复:
补充:
楼主分给的太少了,我这里也有扫描枪,不知道楼主的是PS/2的还是USB得接口,我觉得楼主的问题不是太难,不需要扫描钩子。。。因为嵌入钩子的话可能造成EDIT屏蔽扫描数据。刚上面我说了,直接判断设备ID即可!如果是扫描枪=TRUE.如果是键盘=FALSE。

看错了!此回复无效! --------------------编程问答--------------------
引用 13 楼 alifriend 的回复:
http://www.cnblogs.com/lance2088/archive/2008/06/18/1224591.html
参见这个代码。扫描枪就是个键盘,不会有什么特殊的端口,特征码之类的,不过每个设备肯定有自己的keyboard handle。


扫描枪的输出和键盘的输出是一样的。 --------------------编程问答-------------------- 可凭时间判断,还要屏蔽control + v(粘贴键)。
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,