我做了个IE toolbar其他都实现了,想增加拦截弹出窗口功能。我的IEBand实现了如下接口
TMyIEBand = class(TComObject,IDispatch,IDeskBand,IPersistStreamInit,IObjectWithSite,IInputObject)看了相关资料说实现IDispatch接口可以拦截弹出窗口根据资料我做的如下:
function TMyIEBand.GetTypeInfoCount(out Count: Integer): HResult;
begin
Result := E_NOTIMPL;
end;
function TMyIEBand.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
Result := E_NOTIMPL;
end;
function TMyIEBand.GetIDsOfNames(const IID: TGUID; Names: Pointer;NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
Result := E_NOTIMPL;
end;
function TMyIEBand.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
var
dps: TDispParams absolute Params;
bHasParams: boolean;
begin
bHasParams := (dps.cArgs > 0);
if(not bHasParams) then
begin
Result := E_INVALIDARG;
Exit;
end;
try
Result := S_OK;
case DispId of
107,251: //DISPID_NEWWINDOW,DISPID_NEWWINDOW2:
begin
if(BandForm.IEThis.ReadyState<>READYSTATE_COMPLETE) then
begin
// 禁止弹出窗口
dps.rgvarg[0].pbool^ := true;
//dps.rgvarg[0].vbool := true;
BandForm.KillCount := BandForm.KillCount + 1;
Result := S_OK;
end
else
begin
dps.rgvarg[0].pbool^ := false;
Result := S_OK;
end;
end;
103: //DISPID_QUIT:
Result := S_OK;
else
begin
Result := S_OK;
end;
end;
finally
end;
end;
可是无法拦截弹出窗口,是我那地方写的不对,或者路子错了,有那位朋友做过。高分请教。
TMyIEBand = class(TComObject,IDispatch,IDeskBand,IPersistStreamInit,IObjectWithSite,IInputObject)看了相关资料说实现IDispatch接口可以拦截弹出窗口根据资料我做的如下:
function TMyIEBand.GetTypeInfoCount(out Count: Integer): HResult;
begin
Result := E_NOTIMPL;
end;
function TMyIEBand.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
Result := E_NOTIMPL;
end;
function TMyIEBand.GetIDsOfNames(const IID: TGUID; Names: Pointer;NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
Result := E_NOTIMPL;
end;
function TMyIEBand.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
var
dps: TDispParams absolute Params;
bHasParams: boolean;
begin
bHasParams := (dps.cArgs > 0);
if(not bHasParams) then
begin
Result := E_INVALIDARG;
Exit;
end;
try
Result := S_OK;
case DispId of
107,251: //DISPID_NEWWINDOW,DISPID_NEWWINDOW2:
begin
if(BandForm.IEThis.ReadyState<>READYSTATE_COMPLETE) then
begin
// 禁止弹出窗口
dps.rgvarg[0].pbool^ := true;
//dps.rgvarg[0].vbool := true;
BandForm.KillCount := BandForm.KillCount + 1;
Result := S_OK;
end
else
begin
dps.rgvarg[0].pbool^ := false;
Result := S_OK;
end;
end;
103: //DISPID_QUIT:
Result := S_OK;
else
begin
Result := S_OK;
end;
end;
finally
end;
end;
可是无法拦截弹出窗口,是我那地方写的不对,或者路子错了,有那位朋友做过。高分请教。
procedure WndProc(var Message: TMessage); virtual;重载这个方法
procedure TmyEdit.WndProc(var Message: TMessage);
begin
if Message.msg = wm_mousemove then
begin
cutrsor := crarrow;
exit;
end;
if message.msg = wm_setFocus then
exit;
//屏蔽Wm_setFocus消息
inherited wndproc(message);
end;
我处理了这两个dispid编码,可是不管用啊,是我程序写的那里不对。或少处理了吗。
TOOLBAR只有在显示时才会被加载,弹出窗口一般不会有TOOLBAR,所以根本不会调用你的接口
BHO是IE一打开就加载,这样才有可能.