CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  Windows SDK/API

如何屏蔽鍵盤的輸入

楼主linglingchen()2006-08-31 08:58:07 在 C++ Builder / Windows SDK/API 提问

各位大俠:  
          我目前有一個程序,鍵盤和掃描儀都通過鍵口同電腦相連,而程序現在要做到一個判斷,只能接收掃描儀掃到的數據,如果是鍵盤輸入的數據則不接受,請問這個功能可不可以實現啊,各位請幫忙啊 问题点数:100、回复次数:18Top

1 楼loomman(一剑)回复于 2006-08-31 09:11:06 得分 0

键盘钩子,这里有例子:  
   
  http://www.czvc.com/down.asp?id=104Top

2 楼netliuming(你有安全感吗?)回复于 2006-08-31 09:25:17 得分 20

楼上的是关于vc,只要将数据区定义按下面修改,一样可以适用于bcb  
  //定义一个全局数据区  
  #pragma   option   -zRSHSEG     //缺省数据段  
  #pragma   option   -zTSHCLASS//缺省数据库类名  
  #include   <windows.h>  
   
   
  //共享  
  int   shareint   =   0;  
   
  //创建一个与项目同名的def文件,在.def文件中声明这个数据区   即加上下面一行,然后将文件添加到工程中)      
  SEGMENTS   SHSEG   CLASS   'SHCLASS'   SHARED  
   
  //对于BCB,为什么这么实现DLL中直接定义共享内存块可参考下面:  
  http://community.borland.com/article/0,1410,20008,00.html  
  ///  
  C++Builder   4.0   is   the   first   C++Builder   compiler   that   supports   shared   memory   segments.  
   
  This   document   explains   how   to   use   this   feature   in   windows   DLL.    
   
  To   change   the   data   segment   and   the   class   name,   you   need   to   add    
  #pragma   option   -zR[SEGMENT   NAME]   and    
  #pragma   option   -zT[CLASS   NAME]   to   the   file   you   want   the   data   shared   from.    
  Below   is   the   source   file   I   am   going   to   export   the   integer   named   'data':    
   
  File:   SharedData.cpp    
  //---------------------------------------------------------------------------  
  //   Borland   C++Builder  
  //   Copyright   (c)   1987,   1999   Inprise   Corporation.   All   Rights   Reserved.  
  //---------------------------------------------------------------------------  
   
  #pragma   option   -zRSHSEG             //   change   default   data   segment   name  
  #pragma   option   -zTSHCLASS         //   change   default   data   class   name  
   
  //   Here   is   the   initialized   data   that   will   be   shared.  
  int   data   =   0;  
   
  Notice   that   the   segment   name   for   this   file   is:   SHSEGSHCLASS.   A   .def   file    
  is   required   for   the   linker   to   create   the   shared   segement.   Below   is   what   the    
  .def   file   looks   like:    
   
  File:   Shared.def    
  LIBRARY   SHAREDDLL  
   
  SEGMENTS  
      SHSEG   CLASS   'SHCLASS'   SHARED      
   
   
  Top

3 楼i_love_pc(杰子)(欢迎加入技术交流QQ群:23640432)回复于 2006-08-31 09:36:44 得分 0

学习。Top

4 楼keiy()回复于 2006-08-31 10:09:41 得分 20

大部分键盘接口式读卡器是通过硬件模拟键盘信号的,所以与键盘发出的信息是一样的,软件无法区分,即使你用键盘钩子,也无法实现(如:你屏蔽了键盘的'1'键,同样将屏蔽读卡器的'1'键)Top

5 楼linglingchen()回复于 2006-08-31 10:37:02 得分 0

是啊,我也覺得有這個問題存在,因為鍵盤和掃描儀都是通過PS2的鍵盤插孔的,哎,看來只能通過輸入數據的時間長短來判斷了,因為掃描儀輸入的時間比較短,而用鍵盤手動輸入的時間比較久,以此來區別是那個輸入的,不知道各位還有什么高見啊Top

6 楼netliuming(你有安全感吗?)回复于 2006-08-31 18:53:49 得分 0

有道理,顶一个Top

7 楼CsharpGame(现为菜鸟)回复于 2006-08-31 19:15:40 得分 0

通过时间长短判断是个可行的法子,不过楼主为何要限制用键盘输入呢?Top

8 楼pilixuanke(轩客)回复于 2006-08-31 20:07:11 得分 0

输入时间长短?那扫描仪停止工作,过3秒钟(或更长时间)又开始工作,怎么区分呀?Top

9 楼jaffy(小胖猫^_^笨猫先飞)回复于 2006-09-01 09:10:41 得分 0

我以前也遇到过这个问题,结果后来到应用的时候也没解决,只好换了个USB口的扫描仪Top

10 楼linglingchen()回复于 2006-09-01 09:11:30 得分 0

我這個只是程序的需要,在一個文本框中輸入數據,怕用鍵盤操作有誤,所以限制只能用掃描儀,不過現在還有另外一個問題,我想不能讓文本框中的內容不允許從別的地方粘貼過來,也就是不能用鍵盤的ctrl+V以及鼠標的粘貼功能,是不是有個系統的剪切板,我只要清除剪切板上的內容,就可以做倒了,就是現在不知道如何清除系統剪切板的內容,請問各位有什么高見啊Top

11 楼CsharpGame(现为菜鸟)回复于 2006-09-01 13:05:04 得分 0

防止键盘输入错误你可以用加验证码的方式实现呀,用扫描仪输入也不一定保证完全不出错的。Top

12 楼netliuming(你有安全感吗?)回复于 2006-09-01 13:11:33 得分 0

把文本框属性设为只读就可以了吧,不用那么麻烦。Top

13 楼linglingchen()回复于 2006-09-01 13:26:59 得分 0

誰能告訴我,如何清除剪切板的內容啊Top

14 楼MEFULEU(没有作不到,只有想不到)回复于 2006-09-01 17:23:13 得分 30

Clipboard()->Clear();Top

15 楼truelove7283159(大头娃娃http://traversite.blog.sohu.com)回复于 2006-09-06 11:36:08 得分 10

1  
      ①使用未公开API:BlockInput,  
          就是使用BlockInput(true)/   BlockInput(false)进行锁住键盘鼠标。  
      ②然后再屏蔽Ctrl       +       Alt       +       Del等键,就是重写一个msgina.dll。  
          =======================  
  交互式的登陆支持是由WinLogon调用GINA   DLL实现的,GINA   DLL提供了一个交互式的界面为用户登陆提供认证请求。在WinLogon初始化时,就向系统注册截获CTRL+ALT+DEL消息,所以其他程序就无法得到CTRL+ALT+DEL的消息。  
  WinLogon会和GINA   DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供的接口,自己  
  可以编GINA   DLL来代替MSGINA.DLL。        
  2  
  可以用鼠标和键盘的过滤驱动.   偶有DDK改天下去看看,赫赫:)  
   
  Top

16 楼MEIYOUZHEGEYONGHUMIN()回复于 2006-09-14 22:10:23 得分 0

 
  我遇到类似的问题;  
  http://community.csdn.net/Expert/topic/5002/5002956.xml?temp=.2620355  
   
  查资料  
  http://windowssdk.msdn.microsoft.com/en-us/library/ms674827.aspx  
  但是我的环境目前不是xp...  
   
  不知道谁能做好后,分享一下,谢谢Top

17 楼xt_xiaotian(笑天)回复于 2006-10-09 20:41:56 得分 20

在窗口过程中加入一下代码.  
  case   WM_KEYDOWN:  
  case   WM_SYSKEYDOWN:  
  case   WM_KEYUP:  
  case   WM_SYSKEYUP:  
  case   WM_CHAR:  
  case   WM_SYSCHAR:  
  case   WM_DEADCHAR:  
  case   WM_SYSDEADCHAR:  
  return   0;  
  上面的代码表明,你自己的程序接收所有的键盘消息(不让系统处理),然后忽略掉。Top

18 楼wewaa(C/C++)回复于 2007-01-04 17:58:25 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:linglingchen
  • netliuming
  • keiy
  • MEFULEU
  • truelove7283159
  • xt_xiaotian

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo