我安装了一个WH_JOURNALRECORD钩子,在Win98中运行正常,跑XP中就一点反应都
没了,这是怎么回样?我在XP中要怎么才能使钩子有效?

解决方案 »

  1.   

    再检查检查你的代码,有没有问题,微软好像没有说这个东西有平台区分,也建议到microsoft 主页上去找找,有没有关于这个函数的bug给出来。
      

  2.   

    我查了一下msdn~
    JournalRecordProc
    不区分平台阿~
      

  3.   

    程序是在98里写的,今天装了XP后想运行程序发现JournalRecordProc根本就没有反应,在98中JournalRecordProc函数会调用,到XP下连函数都不调用。
    呵呵。程序如下://///////////////////////////////////////////////////////////////////////////
    // KeyHook.h#ifndef KEYHOOK_H
    #define KEYHOOK_H
    #define WM_QKEYCHAR WM_USER + 1static HWND HookWnd;
    static HHOOK hHook;bool InstallKeyHook (HWND hwnd);
    bool UnInstallKeyHook ();
    LRESULT CALLBACK JournalKeyProc (int nCode, WORD wParam, DWORD lParam);#endif/////////////////////////////////////////////////////////////////////////////
    // KeyHook.cpp#include "stdafx.h"
    #include "KeyHook.h"bool InstallKeyHook (HWND hwnd)
    {
    HookWnd = hwnd;
    //hHook = (HHOOK) SetWindowsHookEx (WH_KEYBOARD,
    // (HOOKPROC) KeyboardHook, 0, 0);
    hHook = (HHOOK) SetWindowsHookEx (WH_JOURNALRECORD,
    (HOOKPROC) JournalKeyProc, 0, 0); if (hHook)
    return true;
    else
    return false;
    }bool UnInstallKeyHook ()
    {
    if (hHook)
    {
    UnhookWindowsHookEx(hHook);
    return true;
    } return true;
    }LRESULT CALLBACK JournalKeyProc (int nCode, WORD wParam, DWORD lParam)
    {
    char cs[100];
    EVENTMSG *pMsg=(EVENTMSG *)lParam;
    if (pMsg->message == WM_KEYDOWN)
    {
    sprintf (cs, "%d\n", pMsg->paramL);
    TRACE (cs);
    }
    return (int) CallNextHookEx(hHook, nCode, wParam, lParam);
    }