C++Builder实现鼠标钩子
DLL中的代码:
#define WM_KEY_HOOK WM_USER+200 //自定义消息
extern "C" {
__declspec(dllexport) BOOL APIENTRY StartHook(); //安装键盘钩子
__declspec(dllexport) BOOL APIENTRY EndHook(); //删除键盘钩子
LRESULT WINAPI KeyProc(int nCode,WPARAM wparam,LPARAM lparam);
}
HHOOK hHook=NULL; //鼠标钩子函数句柄
HINSTANCE hInstance=NULL; //DLL实例句柄
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
hInstance=hinst;
return 1;
}
//---------------------------------------------------------------------------
__declspec(dllexport) BOOL APIENTRY StartHook()
{
hHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyProc,hInstance,0);
return (bool)hHook;
}
__declspec(dllexport) BOOL APIENTRY EndHook()
{
if(hHook&&UnhookWindowsHookEx(hHook))
hHook=NULL;
return (bool)hHook;
}
__declspec(dllexport) LRESULT WINAPI KeyProc(int nCode,WPARAM wparam,LPARAM lparam) {
HWND hwnd;
hwnd=FindWindow(NULL,"键盘钩子测试");
KBDLLHOOKSTRUCT *keyMSG=(KBDLLHOOKSTRUCT *)lparam;
if(nCode==HC_ACTION && (WM_KEYDOWN == wparam || wparam == WM_SYSKEYDOWN))
{
DWORD dwMsg = 1;
dwMsg += keyMSG->scanCode << 16;
dwMsg += keyMSG->flags << 24;
SendMessage(hwnd,WM_KEY_HOOK,(WPARAM)(dwMsg), lparam);
}
return CallNextHookEx(hHook,nCode,wparam,lparam); //继续传递鼠标消息
}
测试程序中的代码:
头文件中:自定义消息类型和消息映射函数
#define WM_KEY_HOOK WM_USER+200 //自定义消息
void __fastcall OnKeyHook(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_KEY_HOOK, TMessage, OnKeyHook);
END_MESSAGE_MAP(TForm);
源码中:
首先,声明需要调用外部方法,用于安装和卸载钩子(按钮事件触发):
extern "C" {
BOOL APIENTRY StartHook(); //安装鼠标钩子
BOOL APIENTRY EndHook(); //删除钩子
}
再实现OnKeyHook方法:
void __fastcall TForm1::OnKeyHook(TMessage &Msg)
{
AnsiString str;
//获取最前端窗口的句柄
HWND hwnd = GetForegroundWindow();
char windowTitle[50] = {0};
GetWindowText(hwnd,windowTitle,sizeof(windowTitle));
AnsiString result = AnsiString(windowTitle[0]);
str += windowTitle;
str += ":按下按键[" ;
char key[20]={0};
GetKeyNameText(Msg.WParam, key, 20);//根据鼠标信息获取按键名
str += key;
str += "]";
Memo1->Lines->Add(str);
}
源码云盘地址:http://pan.baidu.com/s/1bn2Yi67
C++Builder实现鼠标钩子相关推荐
- 使用钩子函数[3] - 建立一个全局的鼠标钩子
分两步: 一.建立 DLL, 并在 DLL 实现钩子的设置.释放和钩子函数; 二.再建一个工程调用测试. 第一步: 做 DLL 先建立一个 DLL 工程, 自动初始的代码如下(去掉注释了): libr ...
- 用Delphi实现Windows的鼠标钩子函数
用Delphi实现Windows的鼠标钩子函数 Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助 文件中,对Windows API函数的说明沿袭了 V ...
- [转]VSTO Office二次开发应用程序键盘鼠标钩子
可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...
- 【IPC-钩子】WM_COPYDATA和鼠标钩子小程序
[IPC-钩子]WM_COPYDATA和鼠标钩子小程序 作者: 来自: 阅读次数: 218 [大 中 小] -------------------------------------------- ...
- VSTO Office二次开发键盘鼠标钩子使用整理
VSTO Office二次开发键盘鼠标钩子使用整理 可能通过程序控制键盘的操作和控制鼠标的一些操作,网上提供比较多的也是比较好的就是通过钩子(Hook)的方式实现. 简单整理了一下,没有找到很好的程序 ...
- VSTO Office二次开发应用程序键盘鼠标钩子
可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...
- 游戏修改器制作教程二:键盘鼠标钩子
本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...
- 小小黑客从鼠标钩子开始,密码看看看
引论 什么是黑客,不同于骇客,黑客一词来源于"Hacker",意思是劈,斩,对于黑客来说学会入侵和破解是提升自己和学习的过程,最重要的是编程能力,因为依赖大多数工具是体现不出自己水 ...
- 全局鼠标钩子:WH_MOUSE_LL, 在【 win 10 上网本】上因为太卡,运行中丢失全局鼠标钩子...
一台几年前买的上网本,让我安装了一个 win 10,然后用来测试程序的时候, 发现 使用 SetWindowsHookEx(WH_MOUSE_LL, mouseHook, GetModuleHandl ...
- 低级鼠标钩子WH_MOUSE_LL
翻MSDN可知,鼠标钩子类型有两个,一个是WH_MOUSE,另一个是WH_MOUSE_LL, 至于它们的区别,百度了一下: 1.WH_MOUSE只能监控钩子所在模块的鼠标事件. 2.WH_MOUSE_ ...
最新文章
- 振动数据 自相关计算时时延_工业设备智能运维如何做?---振动监测
- 声学、音乐计算常用工具总结(soundfile、librosa、pydub、madmom、spleeter)
- 前端参数无法转为后端实体内部类_Spring Boot返回前端Long型丢失精度
- js设置select列表中特定项为选中状态
- STL容器的capacity()和reserve()演示-----vector
- EasyDarwin开源流媒体服务器性能瓶颈分析及优化方案设计
- 游戏社交不足怎么办? 游戏发行中的社交化运营经验分享
- 自定义 Yasnippet 模板
- Apowersoft ApowerMirror v1.4.5 终身商业授权破解版 安卓/iPhone投屏控制软件
- Spring全面详解(学习总结)
- 能力培养——学会学习
- 2022CTFSHOW菜狗杯部分MISC(二)
- Excel的使用-查看公式引用的单元格【跬步】
- html制作多媒体课件,多媒体课件设计与制作 教师课件制作平台
- 如何在Nintendo Switch上进行游戏共享
- IPad amp; iPhone storage - delete my iPad manuscript data
- 基于R和ArcGIS两种方法制作土地利用转移图详细教程
- Zookeeper和Kafka环境搭建总结
- win2008 php上传限制,win2008 r2服务器 iis7.5限制100M带宽的方法
- html网页标签用法
热门文章
- STM32学习记录0005——JLINK下载与调试
- go项目实战 <微信公众号后台开发>(一、获取token)
- 高通9008工具 qpst 安装时报错 qpst server returned unexpected error attempting 解决办法
- access更新查询非汉族加分_Access更新查询
- 三调 图斑地类面积_国土三调到底该怎么做?你需要知道这几点?
- 二、量子通信与量子加密
- 5mm方格本打印模板_自制方格本模板
- rk3399pro Andoid9.0 修改系统默认音量设置
- 土地利用转移矩阵图怎么做_土地利用转移矩阵怎么分析excel?
- java语言数据库课程设计_数据库课程设计 人事管理系统 (一)