读书人

日志记录钩子的有关问题

发布时间: 2012-05-20 16:03:12 作者: rapoo

日志记录钩子的问题
刚开始看这个hook,看罗云彬时看到日志钩子时间键盘hook,我就简单实验下,目的是按了“C”键弹出一个对话框,可是我

试的时候对话框弹出了一堆,我实在是不明白,我用局部键盘钩子和全局键盘钩子也试了下,没有问题,就用这

WH_JOURNALRECORD有问题,下面是实验代码

C/C++ code
#include <windows.h>#include "resource.h"HHOOK hHook;HWND hWinMain;LRESULT CALLBACK ProcHookMain(int iCode, WPARAM wParam, LPARAM lParam){    EVENTMSG * lpEventmsg;    CallNextHookEx(hHook, iCode, wParam, lParam);    if(iCode == HC_ACTION)    {        lpEventmsg = (EVENTMSG *)lParam;        if(lpEventmsg->message == WM_KEYDOWN)        {            if((lpEventmsg->paramL & 0xff) == 'C')                MessageBox(hWinMain, TEXT("Test"), TEXT("Test"), MB_OK);        }    }    return 0;}BOOL CALLBACK ProcDlgMain(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam){    HINSTANCE hInstance;    switch(wMsg)    {    case WM_CLOSE:        UnhookWindowsHookEx(hHook);        EndDialog(hWnd, 0);        return TRUE;    case WM_INITDIALOG:        hWinMain = hWnd;        hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);        hHook = SetWindowsHookEx(WH_JOURNALRECORD, ProcHookMain, hInstance, 0);        if(!hHook)        {            MessageBox(hWnd, TEXT("Hook failure!"), TEXT("Error"), MB_OK | MB_ICONERROR);            EndDialog(hWnd, 0);        }        return TRUE;    }    return FALSE;}WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,                LPSTR lpCmdLine, int iShowCmd){    DialogBoxParam(hInstance, "Dlg", NULL, ProcDlgMain, 0);    return 0;}

资源文件:
[size=10px]
C/C++ code
//Microsoft Developer Studio generated resource script.//#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"/////////////////////////////////////////////////////////////////////////////#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////// Chinese (P.R.C.) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif //_WIN32#ifdef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// TEXTINCLUDE//1 TEXTINCLUDE DISCARDABLE BEGIN    "resource.h\0"END2 TEXTINCLUDE DISCARDABLE BEGIN    "#include ""afxres.h""\r\n"    "\0"END3 TEXTINCLUDE DISCARDABLE BEGIN    "\r\n"    "\0"END#endif    // APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Dialog//DLG DIALOG DISCARDABLE  205, 150, 86, 62STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUCAPTION "Test"FONT 10, "System"BEGINEND///////////////////////////////////////////////////////////////////////////////// DESIGNINFO//#ifdef APSTUDIO_INVOKEDGUIDELINES DESIGNINFO DISCARDABLE BEGIN    "DLG", DIALOG    BEGIN        LEFTMARGIN, 7        RIGHTMARGIN, 79        TOPMARGIN, 7        BOTTOMMARGIN, 55    ENDEND#endif    // APSTUDIO_INVOKED#endif    // Chinese (P.R.C.) resources/////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 3 resource.///////////////////////////////////////////////////////////////////////////////#endif    // not APSTUDIO_INVOKED
[/code]

------解决方案--------------------


windows的代码果然很狗血。

读书人网 >C语言

热点推荐