我的程序如下:
变量定义:
#pragma data_seg("Shared")
HHOOK g_hRecord = NULL;
HHOOK g_hPlayBack = NULL;
HINSTANCE g_hInstance = NULL;
#pragma data_seg()#pragma comment(linker, "/section:Shared,rws")static BOOL g_bCanPlay = TRUE;
static BOOL g_bCanRec = TRUE;
static BOOL g_bDelay = FALSE;
static EVENTMSG MsgBuffer[MAX_BUFFER_SIZE];
static int g_iRec, g_iPlay;Hook函数:
if (code < 0) {
return CallNextHookEx(g_hRecord, code, wParam, lParam);
}
else if (code == HC_SYSMODALOFF) {
g_bCanRec = TRUE;
}
else if (code == HC_SYSMODALON) {
g_bCanRec = FALSE;
}
else if ((g_bCanRec) && (code == HC_ACTION)) {
MsgBuffer[g_iRec] = *((PEVENTMSG)(lParam));
g_iRec++;
}
if (g_iRec == MAX_BUFFER_SIZE) {
UnhookWindowsHookEx(g_hRecord);
}
return TRUE;
我在程序结束后 我查看MsgBuffer为空 这是为什么?

解决方案 »

  1.   

    lParam只是指向EVENTMSG结构的一个指针参数,返回就没了,你复制指针肯定没用的。
    用memcpy()函数。
      

  2.   

    to iluv77(我爱七七):
    MsgBuffer[g_iRec] = *((PEVENTMSG)(lParam));
    我觉得这句话就是把lParam的内容复制MsgBuffer[g_iRec] 应该不用memcpy的我看了自己的MsgBuffer发现里面有东西 但是就是程序不能跑起来
    我看EVENTMSG结构的message项大多是256 512左右的消息请大家帮忙看看问题可能出在哪里
      

  3.   

    我在google搜索一下“日志钩子”,很多,你自己看看有没有参考价值。
      

  4.   

    我想做得事情就是要把用户的一系列操作记录下来 之后在回放 和WH_JOURNALRECORD的意思一样呀 我知道为什么就是不能够成功