简单全局HOOK拦截大部分键盘消息
前言:学习HOOK中,
万一老师讲解HOOK入门教程:http://www.cnblogs.com/del/category/124150.html
http://www.cnblogs.com/del/category/124150.html
正题:全局HOOK拦截大部分键盘消息,Ctrl+alt+del 同Num Lock 目前测试无法截获。
写全局Hook基本步骤:
因为为全局Hook,要用到dll,以后就不知道需要不…………
一.创建dll
1.声明同实现回调函数
2.创建安装钩子函数
3.创建卸载钩子函数
4.按照dll格式输出函数
二、创建exe调用dll
源代码:
///////////////////////////dll代码////////////////////////////////////
//Delphi代码: dll代码
uses
SysUtils,
Windows,
Messages,
Classes;
{$R *.res}
var
hook: HHOOK; {钩子变量}
//声明实现回调函数
function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := 1; //1为杀掉,0为放过
end;
//创建安装钩子函数
function SetHook: Boolean; stdcall;
begin
hook := SetWindowsHookEx(WH_KEYBOARD, @keyHook, HInstance, 0);
Result := hook <> 0;
end;
//创建卸载钩子函数
function DelHook: Boolean; stdcall;
begin
Result := UnhookWindowsHookEx(hook);
end;
{按 DLL 的要求输出函数}
exports
SetHook name 'SetHook',
DelHook name 'DelHook',
keyHook name 'keyHook';
end.
///////////////////////////EXE代码////////////////////////////////////
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
{DLL 中的函数声明}
function SetHook: Boolean; stdcall;
function DelHook: Boolean; stdcall;
var
Form1: TForm1;
implementation
{$R *.dfm}
{DLL 中的函数实现}
function SetHook; external 'MyHook.dll' name 'SetHook';
function DelHook; external 'MyHook.dll' name 'DelHook';
{安装钩子}
procedure TForm1.Button1Click(Sender: TObject);
begin
SetHook;
end;
{卸载钩子}
procedure TForm1.Button2Click(Sender: TObject);
begin
DelHook;
end;
{载次卸载钩子}
procedure TForm1.FormDestroy(Sender: TObject);
begin
DelHook;
end;
end.
//看了这么多例程,只有这个最让人懂~ 全文:http://www.cnblogs.com/piaohun/archive/2008/07/06/1237031.html
简单全局HOOK拦截大部分键盘消息的更多相关文章
- 使用PreTranslateMessage替代钩子函数处理键盘消息
2002年左右,我所在公司在开发基于H.323的VoIP电话系统(用了以色列一家公司的库,具体名字忘记了). 去电信科技研究院测试系统,同事发现处理键盘消息总有一些莫名其妙的问题,比如延迟或异常. 我 ...
- keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z
首先你会发现keybd_event函数中是没有窗口句柄作为参数的,好奇的你一定会觉得很奇怪,那是因为,keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)才可以,但是如果模拟的按键 ...
- HOOK函数(二)——全局HOOK
如果钩子函数定义于当前进程相关的线程中,则钩子函数只能处理当前进程的线程的消息,如果要想处理当前正在运行的所有进程的鼠标消息和键盘消息,那么安装钩子函数的代码必须实现在动态链接库中.所以如果想让安装的 ...
- TControl的消息覆盖函数大全(15个WM_函数和17个CM_函数,它的WndProc就处理鼠标与键盘消息)
注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中)(特别注意,这里居然没有WM_PAINT函数): TControl = class(TComponent) private ...
- 基于Xposed hook 实时监测微信消息
本文以微信版本6.7.3为例进行分析有hook, 大部分做微信机器人的话,首先要实时抓取微信的消息,在这里展示三种方式对微信的消息进行hook: 1.基于UI层拉取加载进行监听 2.基于微信dao层调 ...
- SpringBoot 全局异常拦截捕获处理
一.全局异常处理 //Result定义全局数据返回对象 package com.xiaobing.demo001.domain; public class Result { private Integ ...
- VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)
基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键:同时由于对话框上可能有很多控件,且默认情 ...
- 【笨嘴拙舌WINDOWS】键盘消息,鼠标消息
键盘消息 Windows系统无论何时只有一个窗口(可能是子窗口,也就是控件)能获得焦点. 焦点窗口通过windows消息来响应人的键盘操作,与键盘相关的常用消息罗列如下: WM_KEYDOWN 按 ...
- mfc对话框不能响应键盘消息
这东西真是奇怪,找了半天原因,最终的发现却是让人抓狂,呵呵 现象:对话框按ESC或回车都不能关闭窗口(我没有处理PreTransplanteMessage),用spy++看,对话框完全收不到键盘消息 ...
随机推荐
- Hadoop的RPC工作原理
RPC远程过程调用: Hadoop的远程过程调用(Remote Procedure Call,RPC)是Hadoop中核心通信机制,RPC主要通过所有Hadoop的组件元数据交换,如MapReduce ...
- MongoDB 的安装以及使用
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数 ...
- Sebastian Ruder : NLP 领域知名博主博士论文面向自然语言处理的神经网络迁移学习
Sebastian Ruder 博士的答辩 PPT<Neural Transfer Learning for Natural Language Processing>介绍了面向自然语言的迁 ...
- collections之python基本应用
Collections主要功能 Counter 类 defaultdict 类 namedtuple 类 deque类 orderedDict类 Counter 是一个有助于 hashable 对象计 ...
- 关于{get;set;}访问器
/// <summary> /// 此视频更新时间/创建时间 [生成时间,不手填] /// </summary> public System.String CreateTime ...
- 关于text-align和text-align-last
很多人都用过text-align,基本上也比较熟悉这个属性. text-align: left; // 左对齐 text-align: right; // 右对齐 text-align: center ...
- Postman用法,了解一下
一.Postman的基础功能 二.接口请求流程 1. GET 请求 GET请求:点击Params,输入参数及value,可输入多个,即时显示在URL链接上, 所以,GET请求的请求头与请求参数如在接口 ...
- (转)3款优秀的移动webAPP网站在线测试工具
原文:原文地址 目前适配各个终端的需求越来越强烈呢?比如我们APP项目上线之后,需要一个宣传推广专题页,这个页面当然最好是采取响应式布局来完成.因为需要来推广和下载我们的APP. 无论用户是电脑打开, ...
- python-GIL
全局解释器锁GIL:在同一时刻仅有一个线程可被调度执行.对于单核环境,该实现简单高效.对于多线程的并发应用,一般通过多进程加协程充分发挥多核计算能力. 对于I/O密集型任务,线程发生阻塞时,会自动释放 ...
- SFTP 常用命令 —— SecureCRT版本
SecureCRT按下ALT+P就开启新的会话 进行ftp操作. 输入:help命令,显示该FTP提供所有的命令 pwd: 查询linux主机所在目录(也就是远程主机目录) lpwd: 查询本地目录( ...