L
lvqher
Unregistered / Unconfirmed
GUEST, unregistred user!
我用ActiveX Form编写 了一段代码可以和它调用的DLL进行消息通讯,但是我改成了ActiveX controls编写后,发现DLL发的消息收不到了!
代码如下:
建立内存映射文件:
if HandleDLL = 0 then raise Exception.Create('未发现键盘钩子DLL');
@HookOn :=GetProcAddress(HandleDLL, 'HookOn');
@HookOff:=GetProcAddress(HandleDLL, 'HookOff');
IF not assigned(HookOn) or
not assigned(HookOff) then
raise Exception.Create('在给定的 DLL中'+#13+
'未发现所需的函数');
FileMapHandle:=CreateFileMapping( $FFFFFFFF,
nil,
PAGE_READWRITE,
0,
SizeOf(Integer),
'InfosecHook');
if FileMapHandle=0 then
raise Exception.Create( '创建内存映射文件时出错');
PMem:=MapViewOfFile(FileMapHandle,FILE_MAP_WRITE,0,0,0);
PMem^ := FDelphiControl.Handle;
DLL发消息
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'InfosecHook');
if FileMapHandle<>0 then
begin
PViewInteger:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(PViewInteger^,WM_HOOKKEY,wParam,lParam);
结果发现基本相同的代码在ActiveX FORM 可以收到消息,但在ActiveX controls下收不到,我分析的是ActiveX FORM它通过FORM.handle去作为句柄,ActiveX controls的FDelphiControl.handle为什么就收不到消息呢?
代码如下:
建立内存映射文件:
if HandleDLL = 0 then raise Exception.Create('未发现键盘钩子DLL');
@HookOn :=GetProcAddress(HandleDLL, 'HookOn');
@HookOff:=GetProcAddress(HandleDLL, 'HookOff');
IF not assigned(HookOn) or
not assigned(HookOff) then
raise Exception.Create('在给定的 DLL中'+#13+
'未发现所需的函数');
FileMapHandle:=CreateFileMapping( $FFFFFFFF,
nil,
PAGE_READWRITE,
0,
SizeOf(Integer),
'InfosecHook');
if FileMapHandle=0 then
raise Exception.Create( '创建内存映射文件时出错');
PMem:=MapViewOfFile(FileMapHandle,FILE_MAP_WRITE,0,0,0);
PMem^ := FDelphiControl.Handle;
DLL发消息
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'InfosecHook');
if FileMapHandle<>0 then
begin
PViewInteger:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(PViewInteger^,WM_HOOKKEY,wParam,lParam);
结果发现基本相同的代码在ActiveX FORM 可以收到消息,但在ActiveX controls下收不到,我分析的是ActiveX FORM它通过FORM.handle去作为句柄,ActiveX controls的FDelphiControl.handle为什么就收不到消息呢?