要如何禁止键盘钩子? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061126120722169.html
很多游戏都有这个功能,来防止盗号。  
   
   
  不知道   这是怎么做到的?  
  能不能说说原理?

帮你顶

屏蔽键盘鼠标事件  
   
  //请试一试该程序  
  var  
    YourHook:   HHOOK;  
   
  //定义用于HOOK的消息,也可以是windows的标准消息  
  const  
    WM_YourMessage   =   WM_USER   +   2000;  
   
  //发送你需要的消息  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
    PostMessage(self.Handle,WM_YourMessage,0,0);  
  end;  
   
  //你的HOOK处理函数  
  function   YourHookProc(Code:   Integer;   WParam:   Longint;   var   Msg:   TMsg):   Longint;   stdcall;  
  begin  
  //     if   (Code   =   HC_ACTION)   then  
        if   Msg.Message   =   WM_YourMessage   then  
          //调用你自己的HOOK函数  
          begin  
              showMessage('截获该消息');  
      end;  
    Result   :=   CallNextHookEx(YourHook,   Code,   WParam,   Longint(@Msg));  
  end;  
   
  //安装HOOK  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
    YourHook   :=     SetWindowsHookEx(WH_GETMESSAGE,   @YourHookProc,   0,   GetCurrentThreadID);  
  end;      
   
  ===========================  
   
  帮LZ找的资料```

日志钩子(JournalRecord   Hook)的使用    
  ----   钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。钩子分为线程专用钩子和全局钩子,线程专用钩子只监视指定的线程,要监视系统中的所有线程,必须用到全局钩子。对于全局钩子,钩子函数必须包含在独立的动态链接库(DLL)中,这样才能被各种相关联的应用程序调用。在WINDOWS中,日志钩子是个很特别的钩子,它只有全局钩子一种,是键盘鼠标等输入设备的消息在系统消息队列被取出时发生的,而且系统中只能存在一个这样的日志钩子,更重要是,它不必用在动态链接库中,这样可以省却了为安装一个全局钩子而建立一个动态链接库的麻烦。利用日志钩子,我们可以监视各种输入事件,下面的示例可以用来记录键盘的输入,当有按键发生时,自动记录按键动作的日期和时间以及当前激活的窗口名称。本示例在中文WIN98,Borland   C++   Builder4中编译通过。    
   
  ----   1.新建一个工程,在窗体Form1中放置两个按钮Button1和Button2,   CAPTION分别为“安装日志钩子”和“卸载日志钩子”。    
   
  ----   2.   定义如下全局变量:    
   
  HHOOK   g_hLogHook=NULL;           //钩子变量  
  HWND   g_hLastFocus=NULL;            
  //记录上一次得到焦点的窗口句柄  
  const   int   KeyPressMask=0x80000000;     //键盘掩码常量  
  char   g_PrvChar;             //保存上一次按键值  
   
  3.在Button1的OnClick事件中输入:  
   
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
    {  
      if     (g_hLogHook==NULL)  
        g_hLogHook   =   SetWindowsHookEx  
  (WH_JOURNALRECORD,  
                  (HOOKPROC)JournalLogProc,  
  HInstance,0);     //安装日志钩子  
    }  
   
  4.在Button2的OnClick事件中输入:  
   
  void   __fastcall   TForm1::Button2Click(TObject   *Sender)  
  {  
    if   (g_hLogHook!=NULL)  
      {UnhookWindowsHookEx(g_hLogHook);  
        g_hLogHook=NULL;  
      }     //卸载日志钩子  
  }  
   
  5.输入钩子回调函数:  
  HOOKPROC   JournalLogProc(int   iCode,    
  WPARAM   wParam,   LPARAM   lParam)  
  {  
    if   (iCode<   0)   return   (HOOKPROC)CallNextHookEx  
  (g_hLogHook,iCode,wParam,lParam);  
    if   (iCode==HC_ACTION)  
      {EVENTMSG   *pEvt=(EVENTMSG   *)lParam;  
        int   i;  
        HWND   hFocus;             //保存当前活动窗口句柄  
        char   szTitle[256];           //当前窗口名称  
        char   szTime[128];         //保存当前的日期和时间  
        FILE   *stream=fopen(“c:\\logfile.txt”,"a+t");  
        if   (pEvt->message==WM_KEYDOWN)            
          {int   vKey=LOBYTE(pEvt-   >paramL);         //   取得虚拟键值  
            char   ch;  
            char   str[10];  
            hFocus=GetActiveWindow();            
      //取得当前活动窗口句柄  
            if(g_hLastFocus!=hFocus)            
      //当前活动窗口是否改变  
              {GetWindowText(hFocus,szTitle,256);  
                g_hLastFocus=hFocus;  
                strcpy(szTime,DateTimeToStr(Now())  
  .c_str());     //得到当前的日期时间  
                fprintf(stream,"%c%s%c%c%s",  
  10,szTime,32,32,szTitle);     //写入文件  
                fprintf(stream,"%c%c",32,32);      
              }  
            int   iShift=GetKeyState(0x10);      
  //测试SHIFT,CAPTION,NUMLOCK等键是否按下  
            int   iCapital=GetKeyState(0x14);  
            int   iNumLock=GetKeyState(0x90);  
            bool   bShift=(iShift   &   KeyPressMask)==KeyPressMask;        
            bool   bCapital=(iCapital   &   1)==1;  
            bool   bNumLock=(iNumLock   &   1)==1;  
            if   (vKey   >=48   &&   vKey<   =57)    
    //   数字0-9  
                if   (!bShift)   fprintf(stream,"%c",vKey);  
            if   (vKey   >=65   &&   vKey<   =90)    
  //   A-Z               a-z  
              {if   (!bCapital)  
                    if   (bShift)   ch=vKey;   else   ch=vKey+32;  
                else  
                    if   (bShift)   ch=vKey+32;   else   ch=vKey;  
                fprintf(stream,"%c",ch);  
              }  
            if   (vKey   >=96   &&   vKey<   =105)                   //   小键盘0-9  
                if   (bNumLock)   fprintf(stream,"%c",vKey-96+48);  
            if   (vKey>=186   &&   vKey<=222)                   //   其他键  
              {switch   (vKey)  
                  {case   186:if   (!bShift)   ch=';';   else   ch=':';break;  
                    case   187:if   (!bShift)   ch='=';   else   ch='+';break;  
                    case   188:if   (!bShift)   ch=',';   else   ch='<'   ;break;  
                    case   189:if   (!bShift)   ch='-';   else   ch='_';break;  
                    case   190:if   (!bShift)   ch='.';   else   ch='   >';break;  
                    case   191:if   (!bShift)   ch='/';   else   ch='?';break;  
                    case   192:if   (!bShift)   ch='`';   else   ch='~';break;  
                    case   219:if   (!bShift)   ch='[';   else   ch='{';break;  
                    case   220:if   (!bShift)   ch='\\';   else   ch='|';break;  
                    case   221:if   (!bShift)   ch=']';   else   ch='}';break;  
                    case   222:if   (!bShift)   ch='\'';   else   ch='\"';break;  
                    default:ch='n';break;  
                  }  
                if   (ch!='n')   fprintf(stream,"%c",ch);  
              }  
  //           if   (wParam   >=112   &&   wParam<=123)          
    //   功能键       [F1]-[F12]  
            if   (vKey   >=8   &&   vKey<   =46)       //方向键  
              {switch   (vKey)  
                  {case   8:strcpy(str,"[BK]");break;  
                    case   9:strcpy(str,"[TAB]");break;  
                    case   13:strcpy(str,"[EN]");break;  
                    case   32:strcpy(str,"[SP]");break;  
                    case   33:strcpy(str,"[PU]");break;  
                    case   34:strcpy(str,"[PD]");break;  
                    case   35:strcpy(str,"[END]");break;  
                    case   36:strcpy(str,"[HOME]");break;  
                    case   37:strcpy(str,"[LF]");break;  
                    case   38:strcpy(str,"[UF]");break;  
                    case   39:strcpy(str,"[RF]");break;  
                    case   40:strcpy(str,"[DF]");break;  
                    case   45:strcpy(str,"[INS]");break;  
                    case   46:strcpy(str,"[DEL]");break;  
                    default:ch='n';break;  
                  }  
                if   (ch!='n')  
                  {if   (g_PrvChar!=vKey)  
                      {fprintf(stream,"%s",str);  
                        g_PrvChar=vKey;  
                      }  
                  }  
              }  
  }  
              if  
  (pEvt-   >message==WM_LBUTTONDOWN   ||   pEvt-   >message  
  ==WM_RBUTTONDOWN)  
              {hFocus=GetActiveWindow();  
                if   (g_hLastFocus!=hFocus)  
                  {g_hLastFocus=hFocus;  
                    GetWindowText(hFocus,szTitle,256);                
            strcpy(szTime,DateTimeToStr(Now()).c_str());      
  //得到当前的日期时间  
            fprintf(stream,"%c%s%c%c%s",  
  10,szTime,32,32,szTitle);     //写入文件  
            fprintf(stream,"%c%c",32,32);      
                  }  
              }  
    fclose(stream);  
    return   (HOOKPROC)CallNextHookEx  
  (g_hLogHook,iCode,wParam,lParam);  
  }

http://dev.cbw.com/cbuilder/api/20055245505_2738869.shtml

转贴:  
  “证券大盗”实质上是利用键盘钩子技术进行做案的,他们最关心的是键盘消息“钩子”(WH_KEYBOARD   Hook)。对付此类病毒的有效措施是以毒攻毒,以键盘钩子对付键盘监视:即在应用程序中需要键盘输入的时候,应用程序自己创建并安装一个键盘监视钩子,并使其处于钩子链的顶端,这样键盘输入的消息将被自己的钩子处理程序截获。只要在钩子处理程序中不再调用CallNextHookEx函数,即不把消息传递给下面的钩子

不知道管不管用,测试先。  
      谢谢大家啦~

转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/27/1342605.html

要如何禁止键盘钩子?相关推荐

  1. [C++]键盘钩子程序

    实现适时监视键盘,并将按键信息保存在TXT文件中的程序 Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它 ...

  2. 低级键盘钩子,在WIN7以上版本的问题

    最近在项目用到低级键盘钩子.发现一个很奇怪的事情,在开发环境和测试环境下都正常运行的键盘钩子, 到了现场环境,总是偶发性出现 键盘钩子不能用了,而且退出时产生1404 错误. 后经过阅读MSDN 的R ...

  3. vs2019键盘钩子_C#键盘按键监视

    using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using ...

  4. 怎么允许键盘鼠标唤醒计算机,Windows10如何禁止键盘鼠标唤醒电脑?

    Windows10如何禁止键盘鼠标唤醒电脑?只要我们一段时间不操作电脑,电脑就会进入睡眠状态,这时候我们只要动动键盘或鼠标即可唤醒电脑,然而有些用户并不希望使用键盘鼠标来唤醒电脑,那么要如何禁止呢?操 ...

  5. 利用键盘钩子捕获Windows键盘动作

    引言 在科研生产中对研制.调试操作的记录是非常有必要而且是有很重要价值的.通过对记录信息的分析,可以在事故发生后准确的分析出事故的起因.操作是否存在失误等许多重要线索.通常需要记录的信息是多种多样的, ...

  6. 低级键盘钩子 DLL

    C语言封装的低级键盘钩子(HOOK)的DLL程序, +源码,  并有测试程序... 下载地址 : http://download.csdn.net/detail/hemmingway/4570548

  7. VC/MFC 键盘钩子,代码片断

    在MFC程序中使用键盘钩子来获取按键消息,例程: #include "StdAfx.h" #include "KeyboardHook.h" static HH ...

  8. windows api学习笔记-键盘钩子

    DLL项目的头文件 #ifdef KEYHOOKLIB_EXPORT //此宏将在CPP文件中定义 #define KEYHOOKLIB_API __declspec(dllexport) #else ...

  9. js阻止鼠标右击_使用JS 禁止键盘快捷方式和禁止鼠标右键操作弹窗提示

    很多开发人员或者企业都希望自己的源码不被别人看到或者攻击,于是就有了前端禁止右键禁止键盘快捷键,或者更改右键内容的需求.博智互联这里使用JS 禁止查看代码的键盘快捷方式和禁止鼠标右键操作弹窗提示.虽然 ...

最新文章

  1. 专访Matt Klein关于在Lyft构建Envoy的问答
  2. web api 二
  3. vaadin_Vaadin应用程序中的EJB查找
  4. 计算机盘符无法重命名,win8磁盘分区无法重命名怎么办
  5. java学习(77):GUL下拉菜单框和滚动条
  6. 51nod 1379 索函数
  7. LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
  8. 后端如何收取多个文件_一次上传多个文件机制的两种解决方案
  9. Win10 删除网络驱动器
  10. Flappy Bird游戏 C语言实现
  11. 48种数据分析可视化图表
  12. 开发APP的java工具_程序猿必备的java的app开发工具有哪些
  13. 计算机考证分几个等级
  14. OpenOCD学习笔记 5-stm32f0x配置文件解析
  15. 机器学习笔记 (第一周)
  16. 连涨了三天的股票,该买还是该卖?
  17. android 7.0 手机拍照裁剪问题
  18. android 调用搜狗地图api,sogou地图API用法实例教程
  19. 把时间当作朋友——第1章 醒悟
  20. 官宣丨全球边缘计算大会参会指南出来啦!

热门文章

  1. 不出所料,联通iphone软件屏蔽wifi
  2. 微型计算机原理思维导图
  3. 酒桌上的规矩与决窍(转)
  4. Financial Time Series Segmentation Based On Turning Points
  5. 破解《天龙八部》惊世之秘无名僧的身份
  6. 闪灵数据恢复软件2.5版上线,可制作U盘启动盘
  7. 判断相似三角形的条件c语言,相似三角形的判定条件是什么
  8. 独立站服饰卖家DTC品牌出海案例
  9. 支付宝小程序如何在{{}}中使用函数方法
  10. 当前AI的特点及工业影响