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实现鼠标钩子相关推荐

  1. 使用钩子函数[3] - 建立一个全局的鼠标钩子

    分两步: 一.建立 DLL, 并在 DLL 实现钩子的设置.释放和钩子函数; 二.再建一个工程调用测试. 第一步: 做 DLL 先建立一个 DLL 工程, 自动初始的代码如下(去掉注释了): libr ...

  2. 用Delphi实现Windows的鼠标钩子函数

    用Delphi实现Windows的鼠标钩子函数 Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助 文件中,对Windows API函数的说明沿袭了 V ...

  3. [转]VSTO Office二次开发应用程序键盘鼠标钩子

    可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...

  4. 【IPC-钩子】WM_COPYDATA和鼠标钩子小程序

    [IPC-钩子]WM_COPYDATA和鼠标钩子小程序 作者:  来自:  阅读次数: 218 [大 中 小] -------------------------------------------- ...

  5. VSTO Office二次开发键盘鼠标钩子使用整理

    VSTO Office二次开发键盘鼠标钩子使用整理 可能通过程序控制键盘的操作和控制鼠标的一些操作,网上提供比较多的也是比较好的就是通过钩子(Hook)的方式实现. 简单整理了一下,没有找到很好的程序 ...

  6. VSTO Office二次开发应用程序键盘鼠标钩子

    可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...

  7. 游戏修改器制作教程二:键盘鼠标钩子

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

  8. 小小黑客从鼠标钩子开始,密码看看看

    引论 什么是黑客,不同于骇客,黑客一词来源于"Hacker",意思是劈,斩,对于黑客来说学会入侵和破解是提升自己和学习的过程,最重要的是编程能力,因为依赖大多数工具是体现不出自己水 ...

  9. 全局鼠标钩子:WH_MOUSE_LL, 在【 win 10 上网本】上因为太卡,运行中丢失全局鼠标钩子...

    一台几年前买的上网本,让我安装了一个 win 10,然后用来测试程序的时候, 发现 使用 SetWindowsHookEx(WH_MOUSE_LL, mouseHook, GetModuleHandl ...

  10. 低级鼠标钩子WH_MOUSE_LL

    翻MSDN可知,鼠标钩子类型有两个,一个是WH_MOUSE,另一个是WH_MOUSE_LL, 至于它们的区别,百度了一下: 1.WH_MOUSE只能监控钩子所在模块的鼠标事件. 2.WH_MOUSE_ ...

最新文章

  1. 振动数据 自相关计算时时延_工业设备智能运维如何做?---振动监测
  2. 声学、音乐计算常用工具总结(soundfile、librosa、pydub、madmom、spleeter)
  3. 前端参数无法转为后端实体内部类_Spring Boot返回前端Long型丢失精度
  4. js设置select列表中特定项为选中状态
  5. STL容器的capacity()和reserve()演示-----vector
  6. EasyDarwin开源流媒体服务器性能瓶颈分析及优化方案设计
  7. 游戏社交不足怎么办? 游戏发行中的社交化运营经验分享
  8. 自定义 Yasnippet 模板
  9. Apowersoft ApowerMirror v1.4.5 终身商业授权破解版 安卓/iPhone投屏控制软件
  10. Spring全面详解(学习总结)
  11. 能力培养——学会学习
  12. 2022CTFSHOW菜狗杯部分MISC(二)
  13. Excel的使用-查看公式引用的单元格【跬步】
  14. html制作多媒体课件,多媒体课件设计与制作 教师课件制作平台
  15. 如何在Nintendo Switch上进行游戏共享
  16. IPad amp; iPhone storage - delete my iPad manuscript data
  17. 基于R和ArcGIS两种方法制作土地利用转移图详细教程
  18. Zookeeper和Kafka环境搭建总结
  19. win2008 php上传限制,win2008 r2服务器 iis7.5限制100M带宽的方法
  20. html网页标签用法

热门文章

  1. STM32学习记录0005——JLINK下载与调试
  2. go项目实战 <微信公众号后台开发>(一、获取token)
  3. 高通9008工具 qpst 安装时报错 qpst server returned unexpected error attempting 解决办法
  4. access更新查询非汉族加分_Access更新查询
  5. 三调 图斑地类面积_国土三调到底该怎么做?你需要知道这几点?
  6. 二、量子通信与量子加密
  7. 5mm方格本打印模板_自制方格本模板
  8. rk3399pro Andoid9.0 修改系统默认音量设置
  9. 土地利用转移矩阵图怎么做_土地利用转移矩阵怎么分析excel?
  10. java语言数据库课程设计_数据库课程设计 人事管理系统 (一)