L
LeonSu
Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个HOOK,用WH_CallProc拦截到了WM_Command消息,
然后把消息内容写一个记录变量(PMessageData),变量声明如下:
type
PMessageData=^TMessageData;
TMessageData = Record
EventStr: PChar;
wParam: Integer;
lParam: Integer;
end;
有一过程GetMessageData(var AMessageData: PMessageData)用来读取变量的值。
当Wh_CallProc拦截到一个WM_Command消息时,就会把消息内容写入变量中,然后向主程序
发送一条自定义消息,主程序得到自定义消息后,通过刚才那个过程去读取消息内容。
结果,自定义消息正常发出,消息内容也保存了,但只要主程序一调用GetMessageData就
会出错。
GetMessageData过程已经导出。过程内容如下:
var
MessageData: PMessageData;
...
procedure GetMessageData(var AMessageData: PMessageData)
stdcall;
begin
AMessageData:=MessageData;
end;
主程序中出错的地方是:
procedure TForm1.MyMessage(var MyMsg: TMessage);
var
MessageDataMessageData;
begin
GetMessageData(MessageData);//就是这一条出错!!!!
end;
另外:
当我们用HOOK时,一般都会导出三个过程,如:
procedure StartReceive
stdcall
external "XXXX.dll";
procedure StartHook
stdcall
external "XXXX.dll";
procedure StopHook
stdcall
external "XXXX.dll";
后面两个用来开始与结束HOOK的,主程序中要用;但第一个呢,主要是在SetWindowsHookEx
函数中用的,为什么也要导出呢,主程序中根本没有用到它,同时,我看了许多人写的HOOK
中全是这样写的,原因何在,特请都之?
谢谢!
然后把消息内容写一个记录变量(PMessageData),变量声明如下:
type
PMessageData=^TMessageData;
TMessageData = Record
EventStr: PChar;
wParam: Integer;
lParam: Integer;
end;
有一过程GetMessageData(var AMessageData: PMessageData)用来读取变量的值。
当Wh_CallProc拦截到一个WM_Command消息时,就会把消息内容写入变量中,然后向主程序
发送一条自定义消息,主程序得到自定义消息后,通过刚才那个过程去读取消息内容。
结果,自定义消息正常发出,消息内容也保存了,但只要主程序一调用GetMessageData就
会出错。
GetMessageData过程已经导出。过程内容如下:
var
MessageData: PMessageData;
...
procedure GetMessageData(var AMessageData: PMessageData)
stdcall;
begin
AMessageData:=MessageData;
end;
主程序中出错的地方是:
procedure TForm1.MyMessage(var MyMsg: TMessage);
var
MessageDataMessageData;
begin
GetMessageData(MessageData);//就是这一条出错!!!!
end;
另外:
当我们用HOOK时,一般都会导出三个过程,如:
procedure StartReceive
stdcall
external "XXXX.dll";
procedure StartHook
stdcall
external "XXXX.dll";
procedure StopHook
stdcall
external "XXXX.dll";
后面两个用来开始与结束HOOK的,主程序中要用;但第一个呢,主要是在SetWindowsHookEx
函数中用的,为什么也要导出呢,主程序中根本没有用到它,同时,我看了许多人写的HOOK
中全是这样写的,原因何在,特请都之?
谢谢!