在Windows Journal Record Hook方面需要帮助

时间:2009-08-23 13:41:51

标签: c windows hook

我想构建一个软件测试自动化软件,我正在玩Windows Hooks。

所以我构建了以下C代码。谁能告诉我如何纠正它?

#include "windows.h"

// the call back function
LRESULT CALLBACK JournalRecordProc(int code, WPARAM wParam, LPARAM lParam)
{

    HHOOK hhk = 0;

    if (code > 0)
    {
        // save Data in File
    }

    if (code < 0)
    {
        // work done: now pass on to the next one that does hooking
        CallNextHookEx(hhk, code, wParam, lParam);
    }

    /*
    if (code == )
    {
        // ESC button pressed -> finished recording
        UnhookWindowsHookEx(hhk);
    }
    */

}

int main()

{
    int iRet = 0;

    HHOOK hHook = 0;

    HINSTANCE hMod = 0;

    HOOKPROC (*hHookProc)(int, WPARAM, LPARAM);

        hHookProc = &JournalRecordProc;

    // type of hook, callback function handle, hinstance [dll ?], 0 for systemwide
    hHook =  SetWindowsHookEx(WH_JOURNALRECORD, hHookProc, hMod, 0);

    return iRet;
}

当我编译它时,我得到编译器错误:

error C2440: '=': 'LRESULT (__stdcall
*)(int,WPARAM,LPARAM)' kann nicht in 'HOOKPROC (__cdecl
*)(int,WPARAM,LPARAM)' konvertiert werden (could not be converted)

error C2440: 'Funktion': 'HOOKPROC (__cdecl *)(int,WPARAM,LPARAM)' kann nicht in 'HOOKPROC' konvertiert werden (could not be converted)

warning C4024: 'SetWindowsHookExA': Unterschiedliche Typen für formalen und übergebenen Parameter 2

1 个答案:

答案 0 :(得分:2)

无需声明单独的hHookProc变量 - 只需将您的程序直接传递给SetWindowsHookEx

hHook = SetWindowsHookEx(WH_JOURNALRECORD, JournalRecordProc, hMod, 0);

您还需要一个有效的模块句柄:

HINSTANCE hMod = GetModuleHandle(NULL);

进行了这些编辑后,让你的JournalRecordProc返回一个值,它现在都可以编译并且适用于我(无论如何,SetWindowsHookEx成功)。