为什么ActiveX controls编写的控件收不到消息》 ( 积分: 100 )

  • 主题发起人 主题发起人 lvqher
  • 开始时间 开始时间
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为什么就收不到消息呢?
 
我用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为什么就收不到消息呢?
 
后退
顶部