CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  Windows SDK/API

在线等候~~~~关于屏蔽按键的问题~请赐教

楼主oldboot(至尊无上)2003-08-03 23:34:36 在 C++ Builder / Windows SDK/API 提问

请问那位大哥可以告诉我如何在windows2000/XP下屏蔽WIN键,在线等候! 问题点数:100、回复次数:6Top

1 楼xuv2002(XuWei)回复于 2003-08-04 09:46:59 得分 50

钩子  
   
   
   
  程序代码如下  
  下面得代码锁定了左右   win   键值  
  //---------------------------------------------------------------------------  
   
  #include   <vcl.h>  
  #include   <windows.h>  
  #pragma   hdrstop  
   
  #pragma   argsused  
  extern   "C"   __declspec   (dllexport)   bool   __stdcall   GetKBState(bool   disable);  
  HHOOK   OldHook=NULL;  
  HINSTANCE   hInst=NULL;  
  long   CALLBACK   KeyProc(int   code,   WPARAM   wParam,   LPARAM   lParam);  
  int   WINAPI   DllEntryPoint(HINSTANCE   hinst,   unsigned   long   reason,   void*   lpReserved)  
  {  
          if   (reason==DLL_PROCESS_ATTACH){  
                  hInst   =   hinst;  
          }  
          else   if(reason==DLL_PROCESS_DETACH)  
                  if   (OldHook)  
                          UnhookWindowsHookEx(OldHook);  
          return   1;  
  }  
   
  bool   __stdcall   GetKBState(bool   disable)  
  {  
  //这个函数是用来启动钩子,参数disable   为true   启动   否则钩子关闭  
          if   (disable)   {  
                  if   (OldHook   ==   NULL)  
                          OldHook   =   SetWindowsHookEx(WH_KEYBOARD_LL,  
                                  (HOOKPROC)KeyProc,   hInst,   NULL);  
                  return   OldHook   !=   NULL;  
          }  
          else   {  
                  if   (OldHook   &&   UnhookWindowsHookEx(OldHook))  
                          OldHook   =   NULL;  
                  return   OldHook   ==   NULL;  
          }  
  }  
   
   
  //这段代码就是我用来屏蔽Winnt   系统的键盘的钩子处理函数  
  long   CALLBACK   KeyProc(int   code,   WPARAM   wParam,   LPARAM   lParam)  
  {  
          KBDLLHOOKSTRUCT   *key   =   (KBDLLHOOKSTRUCT*)lParam;  
           
          //下面就是需要响应得键值  
          switch(key->vkCode){  
                    case   91:  
                    case   92:   return   1;   //左右WIN键的键值,想屏蔽其他键也可将其键值写在这里,return   1   表示屏蔽                                          
                    default   :  
                                    return   CallNextHookEx(OldHook,code,wParam,lParam);//或是return   0  
          }  
  }  
  Top

2 楼oldboot(至尊无上)回复于 2003-08-04 19:44:45 得分 0

//这段代码就是我用来屏蔽Winnt   系统的键盘的钩子处理函数  
  long   CALLBACK   KeyProc(int   code,   WPARAM   wParam,   LPARAM   lParam)  
  {  
          KBDLLHOOKSTRUCT   *key   =   (KBDLLHOOKSTRUCT*)lParam;  
           
          //下面就是需要响应得键值  
          switch(key->vkCode){  
                    case   91:  
                    case   92:   return   1;   //左右WIN键的键值,想屏蔽其他键也可将其键值写在这里,return   1   表示屏蔽                                          
                    default   :  
                                    return   CallNextHookEx(OldHook,code,wParam,lParam);//或是return   0  
          }  
  }  
   
   
  ###################怎么声明啊?  
  Top

3 楼xuv2002(XuWei)回复于 2003-08-05 10:06:54 得分 30

在bcb   新建面板里面选择DLL   Wizard   来生成一个dll   工程  
  上边就是生成一个dll   的程序代码  
  上边的程序  
  可以改一改,去掉那个函数  
   
  #include   <vcl.h>  
  #include   <windows.h>  
  #pragma   hdrstop  
   
  #pragma   argsused  
  //extern   "C"   __declspec   (dllexport)   bool   __stdcall   GetKBState(bool   disable);  
  //这个函数可以去掉  
  HHOOK   OldHook=NULL;  
  HINSTANCE   hInst=NULL;  
  long   CALLBACK   KeyProc(int   code,   WPARAM   wParam,   LPARAM   lParam);  
  //这里实现声明钩子函数  
  int   WINAPI   DllEntryPoint(HINSTANCE   hinst,   unsigned   long   reason,   void*   lpReserved)  
  {  
          if   (reason==DLL_PROCESS_ATTACH){  
                  hInst   =   hinst;  
                  OldHook   =   SetWindowsHookEx(WH_KEYBOARD_LL,  
                                      (HOOKPROC)KeyProc,   hInst,   NULL);  
                                //导入dll   时候就启动钩子  
          }  
          else   if(reason==DLL_PROCESS_DETACH)  
                  if   (OldHook)  
                          UnhookWindowsHookEx(OldHook);  
                    //释放dll   的时候关闭钩子  
          return   1;  
  }  
   
  //KeyProc   就是钩子处理的函数  
                //其函数原型如下:  
  /*  
  LRESULT   CALLBACK   KeyboardProc(  
   
          int   code, //   hook   code  
          WPARAM   wParam, //   virtual-key   code  
          LPARAM   lParam   //   keystroke-message   information  
        );  
   
  The   KeyboardProc   hook   procedure   is   an   application-defined   or   library-defined   callback   function   the   system   calls   whenever   an   application   calls   the   GetMessage   or   PeekMessage   function   and   there   is   a   keyboard   message   (WM_KEYUP   or   WM_KEYDOWN)   to   be   processed.      
  上边的意思大概就是说钩子捕捉到的WM_KEYUP   KEYDOWN   消息   都交给这个函数处理  
  */  
   
   
   
  //这段代码就是用来屏蔽Winnt   系统的键盘的钩子处理函数  
  //有关于这方面的可以到msdn   或是   bcb   的win32   帮助里面  
  //按   KeyboardProc   关键字   和SetWindowsHookEx   关键字   查询  
  long   CALLBACK   KeyProc(int   code,   WPARAM   wParam,   LPARAM   lParam)  
  {  
          KBDLLHOOKSTRUCT   *key   =   (KBDLLHOOKSTRUCT*)lParam;  
           
          //下面就是需要响应得键值  
          switch(key->vkCode){  
                    case   91:  
                    case   92:   return   1;   //左右WIN键的键值,想屏蔽其他键也可将其键值写在这里,return   1   表示屏蔽                                          
                    default   :  
                                    return   CallNextHookEx(OldHook,code,wParam,lParam);//或是return   0  
          }  
  }  
   
  Top

4 楼oldboot(至尊无上)回复于 2003-08-05 20:26:00 得分 0

怎么用button控制他的开启和关闭啊?  
  Top

5 楼xuv2002(XuWei)回复于 2003-08-05 20:54:13 得分 20

直接可以这样(采用后面的一种编写dll   的方法,前面一种太麻烦,用不着)  
  开启钩子  
  LoadLibrary("xxx.dll");   这个xxx.dll   就是你用上边代码生成的dll  
   
  关闭  
  使用FreeLibrary("xxx.dll");    
   
  Top

6 楼Yans(跟贴是一种友谊)回复于 2003-08-06 09:37:38 得分 0

怎样屏蔽ctrl+alt+del按键呢?不管在windows的任何版本下。Top

相关问题

  • 屏蔽按键……
  • 关于屏蔽按键的急问!(在线等)
  • 屏蔽鼠标按键
  • 如何屏蔽PrintScreen按键?
  • 怎样屏蔽键盘和鼠标响应?在线等候中~~~~~~~~~~~!
  • DataGrid的按键屏蔽问题?
  • 如何屏蔽鼠标按键
  • 注意有分!在线等候,关于屏蔽掉每次运行时的数据库登陆问题!
  • 如何屏蔽键盘的某一个按键
  • 咋样屏蔽Windows NT下的系统按键???

关键词

  • 函数
  • 代码
  • dll
  • code
  • null
  • oldhook
  • 钩子
  • keyproc
  • hinst
  • wparam

得分解答快速导航

  • 帖主:oldboot
  • xuv2002
  • xuv2002
  • xuv2002

相关链接

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

广告也精彩

反馈

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