C++ Builder实现MessageBox拦截
来源:互联网 发布:windows用mac的硬盘 编辑:程序博客网 时间:2024/05/18 01:14
MessageBox分为MessageBoxA和MessageBoxW两种方法,若要完全拦截MessageBox需要实现两个方法;
基本原理可以参考下面的博客:
http://blog.csdn.net/friendan/article/details/12224481
这篇文章是在C++Builder 6环境下实现APIHOOK拦截MessageBox
界面如下:
开始按钮:加载鼠标钩子
结束按钮:卸载鼠标钩子
调用MessageBoxA:调用一个自己写的MessageBoxA
调用MessageBoxW:调用一个自己写的MessageBoxW
未安装钩子前:
安装钩子后:
下面说一下代码:
测试界面要注意的是如何调用MessageBoxW,第二个参数和第三个参数均为wchar_t *,所以需要做一次转换
char *CStr = "正常的MessageBoxW";
int len = MultiByteToWideChar(CP_ACP,0,CStr,strlen(CStr),NULL,0);
wchar_t* m_wchar = new wchar_t[len+1];
MultiByteToWideChar(CP_ACP,0,CStr,strlen(CStr),m_wchar,len);
m_wchar[len] = '\0';
char *CStr1 = "提示对话框二";
int len1 = MultiByteToWideChar(CP_ACP,0,CStr1,strlen(CStr),NULL,0);
wchar_t* m_wchar1 = new wchar_t[len1+1];
MultiByteToWideChar(CP_ACP,0,CStr1,strlen(CStr),m_wchar1,len1);
m_wchar1[len1] = '\0';
MessageBoxW(Handle,m_wchar,m_wchar1,MB_OK);
DLL结构如下:
定义了一个THookClass通用类,可以通过API陷入方式实现拦截,这样就不需要重复写多个方法分别实现MessageBoxA和MessageBoxW了。
class THookClass{
private:
HANDLE hProcess;
bool AreadlyHook;
BYTE Oldcode[5];//保存API入口处代码
BYTE Newcode[5];//JMP XXXX
DWORD IdOld,IdNew;
public:
FARPROC OldFunction,NewFunction;
THookClass(){};
THookClass(FARPROC OldFun,FARPROC NewFun);
~THookClass();
void Restore();//停止HOOK
void Change();//开始HOOK
};
源码下载地址:http://pan.baidu.com/s/1o6xSzOY
发现代码有问题,之前拦截的MessageBoxA消息仅限于本进程,根本不是全局的,修改了一下代码可以拦截全局MessageBox消息
源码下载如下:http://pan.baidu.com/s/1ntivCG5
使用C++builder打开代码重新编译时可能会报错
提示无法加载THookClass,这里可以打开项目的路径信息:
在Include path路径下无法加载到THookClass,没什么好的办法,新建一个项目把代码拷过去或者可以试试把THookClass.cpp文件考到上述中某个文件夹下面试试。
- C++ Builder实现MessageBox拦截
- C++Builder中MessageBox的基本用法
- C++Builder中MessageBox的基本用法
- C++Builder中MessageBox的基本用法
- c++builder让MessageBox窗口置顶
- C++Builder实现鼠标钩子
- C++Builder实现内存映射
- Delphi和C++builder中的MessageBox及相近的四种消息框
- Win32 SDK函数MessageBox的模拟实现(C语言版)
- MessageBox用C/C++实现一个提示信…
- 在C++Builder下实现FTP断点续传
- [C++] C++ Builder 下实现端口读写
- c++builder的多国语言实现
- 在C++Builder下实现FTP断点续传
- C:深入研究MessageBox
- C#.消息对话框MessageBox
- C#Messagebox使用
- C#MessageBox图解
- 教你如何让Mac air在闭合盖子时,系统不会休眠!
- 随机产生的单词文档排序
- spring的aop编程
- 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
- Python 列表、元组、字典、字符串
- C++ Builder实现MessageBox拦截
- C# 获取IE浏览器句柄
- 使用fragment在activity中传值的例子
- Gradle 教程
- android studio 导入 eclipse 并上传到svn
- 如何使用struts2搭建web项目
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- 数据包接收系列 — 下半部实现(软中断)
- 我的青春,我的梦