原文地址:http://blog.okbase.net/BlueSky/archive/3839.html

一直以来有个疑问,就是如果别人在你的电脑上安装了键盘钩子来监视你的键盘按键动作,我的程序怎么才能避开这些全局键盘钩子(system-wide hook)的监视.正好最近一段时间因为工作关系在研究钩子,顺便研究了一下这个问题,今天算是找到了一个解决办法.
解决办法:
在我的程序中安装一个局部键盘钩子(thread-specified hook),键盘钩子函数中不调用CallNextHookEx;
原理:
1.钩子链可以被破坏.同一类型的钩子会形成一个链,假如先被调用的钩子没有调用CallNextHookEx的话,后面的钩子将得不到调用.
2.对于某个特定的线程,如果既安装了线程钩子又安装了系统钩子,则线程钩子先于系统钩子被调用.

实验:
键盘钩子(WH_KEYBOARD)
我写了个简单的对话框程序,部分代码如下:
1.先声明钩子HHOOK gHook = NULL;
2.键盘钩子函数:
LRESULT  CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
 MessageBox(AfxGetMainWnd()->GetSafeHwnd(), "Thread hook", "keyboard", MB_OK);
 return 0;
 //return CallNextHookEx(gHook, nCode, wParam, lParam);
}
3.安装钩子:
 DWORD nThreadid = GetCurrentThreadId();
 gHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, AfxGetApp()->m_hInstance, nThreadid);
 if(gHook == NULL)
 {
      AfxMessageBox("Install Keyboard Hook Failed", MB_OK);
 }
4.卸载钩子
BOOL ret = UnhookWindowsHookEx(gHook);
实验方法及结果如下:
1.先启动另一个程序,安装系统键盘钩子,再启动我的程序,安装局部键盘钩子,实验结果表明系统钩子对我的程序无效.
2.先启动我的程序,安装局部键盘钩子,再启动另一个程序,安装系统键盘钩子.在我的程序中系统键盘钩子无效.

如何让你的程序避开全局键盘钩子的监视相关推荐

  1. C++编写Windows全局键盘钩子记录键盘输入

    1.键盘钩子处理程序 HookProc 2.键盘钩子安装程序 InstallHook 3.键盘钩子卸载程序 UnInstallHook 4.键盘钩子dll的加载,安装与释放 生成标准windows d ...

  2. 使用raw input 代替全局键盘钩子

    //关于raw input 请查看msdn https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536%28v=vs.85%29 ...

  3. HOOK使用:全局键盘钩子

    // CatchKey.cpp : Defines the entry point for the DLL application. // #define _WIN32_WINNT 0x0500 // ...

  4. 我的全局键盘钩子(KeyBoardHook)

    1,钩子操作类 public class KeyPressSender{[StructLayout(LayoutKind.Sequential)]public class KeyBoardHookSt ...

  5. VC++钩子使用之全局键盘钩子

    文章目录 钩子简介 使用钩子 生成KeyHook.dll 加载KeyHook.dll 窗体接收两次按键消息的问题 参考 如果想要在Win32窗体程序中实现按键捕获,可以覆写PreTranslateMe ...

  6. VSTO应用程序中加入键盘钩子

    在VSTO应用程序中有时为了处理一些快捷按键操作等实现一些特殊的功能,此时需要对键盘进行挂钩,此时使用P/Invoke函数实现,参考如下: VSTO加载和卸载时进行钩子的初始化和卸载 代码 Keybo ...

  7. 代码实现全局消息钩子SetWindowsHookExA监视按键记录

    简单的使用Windows提供的Hook API SetWindowsHookExA,实现弹窗提示每次按下的按键 步骤: 1.编写一个Dll调用SetWindowsHookExA,实现弹窗 2.编写一个 ...

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

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

  9. 利用底层键盘钩子拦载任意按键(回调版)

    前段时间我曾经写过一篇<利用底层键盘钩子屏蔽任意按键>,并放到了我的blog上.这篇文章的题目中把"屏蔽"改成了"拦截",显然要比以前的版本强一些了 ...

最新文章

  1. 第4章javascript变量、作用域和内存回收
  2. 淘宝开源Android容器化框架Atlas开发者指南
  3. 掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇
  4. gets函数会读取回车吗_会做二次函数吗?用6种方法教你做二次函数(初中生不要错过)...
  5. i5 11300h和R5 5600H 参数对比哪个好
  6. python 将列表值赋予函数_python把空列表作为函数默认参数,可是有坑的
  7. 一文彻底搞懂加密、数字签名和数字证书,看不懂你打我!
  8. web使用百度地图实现经纬度定位和轨迹
  9. activiti选择上一步下一步处理人
  10. 重庆计算机二级成绩查询2020年12月,重庆2020年12月计算机等级考试成绩查询入口已开通...
  11. ReSharper未按照预期路径安装后如何修改(Windows 找不到“C:\Program Files (x86)\JetBrains\Installations”。请检查拼写并重试)
  12. 点盾云三种创建模式有什么区别?
  13. TextToSpeech文字转语音
  14. MODBUS通信协议代码
  15. 操作系统(四)——文件管理
  16. 【转载】python 函数的入参 一个* 两个* 的使用与区别
  17. 利用java代码一键生成数据库文档
  18. 数据库中各表关联图及其说明_如何在图中思考:图论及其应用的说明性介绍
  19. 微信医院预约挂号小程序系统设计与实现
  20. GTEx:基因型和基因表达量关联数据库

热门文章

  1. ios13可以读取u盘吗
  2. 大学计算机基础算什么水平,大学计算机基础(含实验)
  3. 【Nvidia显卡驱动安装失败】
  4. iOS测试软件砸壳,iOS应用砸壳
  5. axios反向代理proxy个人理解
  6. SVN共享项目时显示项目已有SVN/目录,有可能他先前已经共享
  7. 2017百度校招笔试第一题
  8. 诛仙在服务器启动虚拟机镜像添加代码,诛仙3风吟虚拟机镜像一键服务端+青萝+配套客户端+GM工具+EL编辑器+启动说明...
  9. 基于5G的工业智能化云系统
  10. java版微信小程序登录商城源码Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码