关于消息结构体,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中,便于使用。