zoukankan
html css js c++ java
hook
//---------------------------------------------------------------------------
//挂上、卸下Keyboard hook,并运用自定义信息传递Hook数据
//---------------------------------------------------------------------------
#include <vcl.h> //原有BCB 头文件
#include <windows.h> //原有window 头文件
#pragma hdrstop
#pragma argsused
//自定义的键盘信息,与执行文件TKeyHookForm中自定义的键盘信息相互对应
const
int
WM_KEYHOOK = WM_USER+100;
//---------------------------------------------------------------------------
//DLL的固定声明
HHOOK
hHook;
//挂上的hook handle
HWND
hAppWnd;
//执行此dll的特定exe程序handle__"TKeyHookForm"
HINSTANCE
inst;
//连接文件的模块handle,固定行程
//---------------------------------------------------------------------------
//符合以C语言编译的DLL输出函数
extern
"C"
{
__declspec
(
dllexport
) __stdcall
void
SetHook(
void
);
__declspec
(
dllexport
) __stdcall
void
RemoveHook(
void
);
}
//---------------------------------------------------------------------------
//重载的KeyboardProc函数,持续送出键盘全域信息
LRESULT
CALLBACK KeyboardProc(
int
,
WPARAM
,
LPARAM
);
//---------------------------------------------------------------------------
//DLL的构造函数与析构函数
int
WINAPI DllEntryPoint(
HINSTANCE
hinst, unsigned
long
reason,
void
*)
{
inst = hinst;
//当此DLL被调用or结束
switch
(reason)
{
case
DLL_PROCESS_ATTACH :
//此DLL构造函数
//取得执行此dll的特定程序handle
hAppWnd = ::FindWindow(
"TKeyHookForm"
, 0);
break
;
case
DLL_PROCESS_DETACH:
//此DLL析构函数
break
;
case
DLL_THREAD_ATTACH:
//此DLL多线程构造函数
break
;
case
DLL_THREAD_DETACH:
//此DLL多线程析构函数
break
;
}
return
1;
}
//---------------------------------------------------------------------------
//注册自定义hook到hook链中
void
__stdcall SetHook(
void
)
{
//若Hook尚未挂上信息链中,则将本鼠标信息dll注册至hook链中
if
(hHook == NULL)
{
hHook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, inst, 0);
//显示是否挂上hook,测试用!
if
(hHook == NULL)
MessageBox(NULL,
"Sorry! 无法挂上Hook。"
,
"Hook DLL"
, MB_OK);
else
::TextOut(GetDC(0),10,10,
"挂上Hook。"
,10);
}
}
//---------------------------------------------------------------------------
//在hook链中,解除自定义的hook
void
__stdcall RemoveHook(
void
)
{
//若Hook已经挂上信息链,则卸下此Hook信息
if
(hHook != NULL)
{
if
(::UnhookWindowsHookEx(hHook) != FALSE)
{
hHook = NULL;
::TextOut(GetDC(0),50,10,
"释放Hook。"
,10);
}
else
//测试用!
MessageBox(NULL,
"Sorry! 无法释放Hook。"
,
"Hook DLL"
, MB_OK);
}
else
//测试用!
::TextOut(GetDC(0),80,10,
"Hook isn't NULL"
,16);
}
//---------------------------------------------------------------------------
//重载的KeyboardProc函数,持续送出键盘全域信息
LRESULT
CALLBACK KeyboardProc(
int
nCode,
WPARAM
wParam,
LPARAM
lParam)
{
//若未挂上Hook链或键盘无信息输出,就交予下一hook链
if
((nCode < 0) || nCode == HC_NOREMOVE)
return
::CallNextHookEx(hHook, nCode, wParam, lParam);
//若信息重复,则跳至下一hook链
if
(lParam & 0x40000000)
return
::CallNextHookEx(hHook, nCode, wParam, lParam);
//若在DLL建构式中,取得执行此dll的特定程序handle,即送出自定义键盘信息
if
(hAppWnd != NULL)
SendMessage(hAppWnd, WM_KEYHOOK, wParam, lParam);
return
::CallNextHookEx(hHook, nCode, wParam, lParam);
}
//---------------------------------------------------------------------------
粘贴自: <
http://read.pudn.com/downloads11/sourcecode/windows/47550/C++%20Builder%E4%B8%8EWindows%20API%E7%BB%8F%E5%85%B8%E8%8C%83%E4%BE%8B/Ch6_Hook(Keyboard%20&%20Mouse)/ch06-01-1/Hook_Keyboard_BCB3/keydll.cpp__.htm
>
通过 为知笔记 发布
查看全文
相关阅读:
DBCC 常用命令
查看数据库备份情况
identity 列自动增长问题(SQL Server 2012 Auto Identity Column Value Jump Issue)
job相关脚本
Ad hoc update to system catalogs is not supported
数据库加密&证书创建
sp_MSforeachdb&sp_MSforeachtable&sp_MSforeachobject&查看某个对象的依赖对象
session 学习
Eclipse Python Djando 环境配置
MySQL 日志文件与相关参数
原文地址:https://www.cnblogs.com/xe2011/p/594b34939916e070aad2e1e4d2ae8d04.html
最新文章
被3整除的子序列(闫氏DP分析法)
寒假训练day2:Good Bye 2020
寒假训练day1:Educational Round 101 (Rated for Div. 2)
C. Two Brackets
AtCoder Regular Contest 105 ---- B
C++需要用到的基础东西
16进制转2进制再转8进制
ubuntu 提示无法获得锁lock
Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)[转]
mysql char和varchar的区别
热门文章
PHP中文乱码的三个原因及解决方法 [转]
堆栈的使用【ACM】
hadoop常用命令
WordCount运行详解
NameNode Recovery Tools for the Hadoop Distributed File System
centos安装配置hadoop超详细过程
CentOS7修改主机名
hue忘记管理员登陆密码
JDBC driver cannot be found(使用cloudera manger 安装oozie服务)
SMP、NUMA、MPP体系结构
Copyright © 2011-2022 走看看