关于消息结构体,CopyMemory函数有关问题(刚刚接触API编程,新手)

关于消息结构体,CopyMemory函数问题(刚刚接触API编程,新手)
定义消息结构体
Private   Type   EVENTMSG
          wMsg   As   Long
          lParamLow   As   Long
          lParamHigh   As   Long
          msgTime   As   Long
          hWndMsg   As   Long
End   Type
Dim   EMSG   As   EVENTMSG

。。。。。。。。

'回调函数
Public   Function   JournalRecordProc(ByVal   nCode   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long
    If   nCode   <   0   Then
          '若nCode
          JournalRecordProc   =   CallNextHookEx(hJournalHook,   nCode,   wParam,   lParam)
          Exit   Function
    End   If
    '事件消息处理
    ResolvePointer(SHptr).FireEvent   lParam
    '处理完毕后,传递给下一个钩子
    Call   CallNextHookEx(hJournalHook,   nCode,   wParam,   lParam)
End   Function

。。。。。。

Friend   Function   FireEvent(ByVal   lParam   As   Long)
    。。。。。。
    CopyMemory   EMSG,   ByVal   lParam,   Len(EMSG)
    判定EMSG.wMsg分别处理
    。。。。。
End   Function


这是hook程序中的一部分代码,hook被定义成了一个类。

问题1:消息结构体定义时,为什么有些程序里定义的不一样,比如:结构体中的第一个数据项,好多程序里定义为句柄,第二个是消息类型,而此处定义第一个是消息类型,最后一个是句柄,和顺序有关吗?此结构体取得消息后,EMSG的值怎么来得到??

问题2:CopyMemory函数的作用,及参数详解。此处第二个参数的含义及作用是什么?




------解决方案--------------------
1、你这个EVENTMSG结构是标准声明,没错。在哪里看到过有不同声明,是不是把EVENTMSG与MSG结构弄混了?因为MSG结构才是第一个定义为句柄,第二个是消息类型!

2、CopyMemory就是按地址复制内存数据,你这里的lParam是指向EVENTMSG结构数据所在的内存地址,CopyMemory它的作用是把那里的数据复制到你自己的变量EMSG中,便于使用。