首页
社区
课程
招聘
各位老大 ,能截获IE 地址栏的输入吗 怎么截获
发表于: 2009-3-11 10:59 7232

各位老大 ,能截获IE 地址栏的输入吗 怎么截获

2009-3-11 10:59
7232
收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
键盘钩子然后判断是你需要过滤的地址栏就用SendMessage获取
2009-3-11 11:01
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
判断窗口是否为ie不就是了
2009-3-11 12:40
0
雪    币: 268
活跃值: (95)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
BHO应该可以!
2009-3-11 13:37
0
雪    币: 243
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
BHO,UrlSearchHook
2009-3-11 16:18
0
雪    币: 474
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
同5楼
应该可以做到的
2009-3-12 12:39
0
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
http://www.vckbase.com/document/viewdoc/?id=614
http://www.vckbase.com/document/viewdoc/?id=1426
http://www.google.cn/search?q=site%3Awww.vckbase.com+BHO&Submit=Google%D6%D0%B5%C4VC%D6%AA%CA%B6%BF%E2&hl=zh-CN&lr=lang_zh-CN
2009-3-12 14:18
0
雪    币: 7276
活跃值: (2043)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Can I know the real download link in IE?  How?
2009-3-12 14:55
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
编写BHO最终形成的就是一个DLL文件吧
请问,该DLL文件是加载在EXPLORER进程中 还是 IE进程中
我写好了一个DLL 用REGSVR32也提示注册成功
但是我查看进程 却没有发现该DLL 的注入
2009-3-14 16:17
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
9楼的问题 已经搞定  
现在的问题是  
在地址栏输入  随便一些字符 数字什么的 都可以转向到 WWW.PEDIY.COM
但是 输入WWW.BAIDU.COM就不行了  
如何才能在地址栏 保证不管输入什么 都转向到 WWW.PEDIY.COM

我的实现函数是这样写的
function tiesearch.translate(lpwszsearchurl:pwidechar;cchbuffersize:dword):hresult;
begin
  stringtowidechar('http://www.pediy.com',lpwszsearchurl,21*2);
  result:=s_ok;
end;
2009-3-14 20:39
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
www.baidu.com
很厉害 它使用的是什么技术呢

procedure ttieadvbho.dobeforenavigate2(const pdisp:idispatch;var url:olevariant;var flags:olevariant;var targetframename:olevariant;var postdata:olevariant; var headers:olevariant;var cancel:wordbool);
begin
  if trim(url)='http://www.pediy.com' then begin
     Cancel:=True;
     URL:='http://www.163.com';
     (pDisp as IWebbrowser2).Navigate2(URL,Flags,TargetFrameName,PostData,Headers);
  end;

end;

这段代码可以成功的将PEIDY.COM转向到 163.COM
但是将PEDIY 换成BAIDU.COM 就无法转向到 163.com
2009-3-14 21:23
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
要在nagbefore和complete里都做XX~~~
你那个是不抗刷新~~
2009-3-14 22:29
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢V牛  
经过测试 发现360会阻断BHO的  不知道这个有什么好的办法(R3下 )
只是技术上的探讨  没有任何企图 和恶意    呵呵
2009-3-15 07:49
0
雪    币: 243
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
直接抓包改http请求吧
2009-3-15 15:26
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
type
  TIEMonitor = class(TComObject, IDispatch, IObjectWithSite)
  public
    function GetTypeInfoCount(out Count:Integer):HResult;stdcall;
    function GetTypeInfo(Index,LocaleID:Integer;out TypeInfo):HResult;stdcall;
    function GetIDsOfNames(const IID:TGUID;Names:Pointer;
      NameCount,LocaleID:Integer;DispIDs:Pointer):HResult;stdcall;
    function SetSite(const pUnkSite:IUnknown):HResult;stdcall;
    function GetSite(const riid:TIID;out site:IUnknown):HResult;stdcall;
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
      Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
  private
    IEThis:IWebBrowser2;
    Cookie:Integer;
  protected
  end;

   BHO               = record
   SendBHO           : TCopyDataStruct;
   Hwnd                : THandle;
   Path              : string;
   LenPath           : array[0..MAX_PATH] of Char;
   end;

const
  Class_IEMonitor: TGUID = '{47CFDDF9-6FBD-4C06-8752-24FEFBA10D51}';

var
  reg:Tregistry;
  TBHO       :^BHO;
  

implementation

uses ComServ,  ComConst;

procedure DoBeforeNavigate2(const pDisp:IDispatch;var URL:OleVariant;
  var Flags:OleVariant;var TargetFrameName:OleVariant;var PostData:OleVariant;
  var Headers:OleVariant;var Cancel:WordBool);
const i:integer=0;

begin
       if  SeachData(url)=True then
        begin
           Cancel:=True;
           New(TBHO);
           TBHO.path:= trim(URL)+'+';
           TBHO.SendBHO.cbData:= Length(URL)+ 1;
           GetMem(TBHO.SendBHO.lpData,   TBHO.SendBHO.cbData);
           StrCopy(TBHO.SendBHO.lpData,   PChar(TBHO.path));
           TBHO.Hwnd :=   FindWindow(nil,  '网页防漏卫士');
           SendMessage(TBHO.Hwnd,WM_COPYDATA,GetCurrentProcessId(), Cardinal(@TBHO.SendBHO));
           FreeMem(TBHO.SendBHO.lpData);
           Dispose(TBHO);
           URL:='about:blank';
           (pDisp as  IWebbrowser2).Navigate2(URL,Flags,TargetFrameName,PostData,Headers);
        end;
end;

procedure DoOnQuit;
begin

end;

procedure BuildPositionalDispIDs(pDispIDs:PDispIDList;const dps:TDispParams);
var
  i:Integer;
begin
  Assert(pDispIDs<>nil);
  for i:=0 to dps.cArgs-1 do
    pDispIDs^[i]:=dps.cArgs-1-i;
  if(dps.cNamedArgs<=0)then
    Exit;
  for i:=0 to dps.cNamedArgs-1 do
    pDispIDs^[dps.rgdispidNamedArgs^[i]]:=i;
end;

function TIEMonitor.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
      Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
type
  POleVariant=^OleVariant;
var
  dps:TDispParams absolute Params;
  bHasParams:Boolean;
  pDispIDs:PDispIDList;
  iDispIDsSize:Integer;
begin
  Result:=DISP_E_MEMBERNOTFOUND;
  pDispIDs:=nil;
  iDispIDsSize:=0;
  bHasParams:=(dps.cArgs>0);
  if(bHasParams)then
  begin
    iDispIDsSize:=dps.cArgs*SizeOf(TDispID);
    GetMem(pDispIDs,iDispIDsSize);
  end;
  try
    if(bHasParams)then BuildPositionalDispIDs(pDispIDs,dps);
    case DispID of
      104:begin
          Result:=S_OK;
        end;
      250:begin
           DoBeforeNavigate2(IDispatch(dps.rgvarg^[pDispIDs^[0]].dispVal),
            POleVariant(dps.rgvarg^[pDispIDs^[1]].pvarVal)^,
            POleVariant(dps.rgvarg^[pDispIDs^[2]].pvarVal)^,
            POleVariant(dps.rgvarg^[pDispIDs^[3]].pvarVal)^,
            POleVariant(dps.rgvarg^[pDispIDs^[4]].pvarVal)^,
            POleVariant(dps.rgvarg^[pDispIDs^[5]].pvarVal)^,
            dps.rgvarg^[pDispIDs^[6]].pbool^);
          Result:=S_OK;
        end;
      253:begin
          DoOnQuit();
          Result:=S_OK;
        end;
    end;//end of case DispID of
  finally
    if(bHasParams)then
      FreeMem(pDispIDs,iDispIDsSize);
  end;
end;

function TIEMonitor.GetTypeInfo(Index,LocaleID:Integer;out TypeInfo):HResult;
begin
  Result:=E_NOTIMPL;
  Pointer(TypeInfo):=nil;
end;

function TIEMonitor.GetTypeInfoCount(out Count:Integer):HResult;
begin
  Result:=E_NOTIMPL;
  Count:=0;
end;

function TIEMonitor.GetIDsOfNames(const IID:TGUID;Names:Pointer;
  NameCount,LocaleID:Integer;DispIDs:Pointer):HResult;
begin
  Result:=E_NOTIMPL;
end;

function TIEMonitor.GetSite(const riid:TIID;out site:IUnknown):HResult;
begin
  if(Assigned(IEThis))then
    Result:=IEThis.QueryInterface(riid,site)
  else Result:=E_FAIL;
end;

function TIEMonitor.SetSite(const pUnkSite:IUnknown):HResult;
var
  cmdTarget:IOleCommandTarget;
  Sp:IServiceProvider;
  CPC:IConnectionPointContainer;
  CP:IConnectionPoint;
begin
if(Assigned(pUnkSite))then
  begin
    cmdTarget:=(pUnkSite as IOleCommandTarget);
    Sp:=(CmdTarget as IServiceProvider);
    if(Assigned(Sp))then//获得IE的WebBrowser接口,
      Sp.QueryService(IWebBrowserApp,IWebBrowser2,IEThis);
    if(Assigned(IEThis))then
    begin
      IEThis.QueryInterface(IConnectionPointContainer,CPC);//寻找连接点
      CPC.FindConnectionPoint(DWEBBrowserEvents2,CP);
      CP.Advise(Self,Cookie);//通过Advise方法建立Com自身与连接点的连接
    end;
  end;
  Result:=S_OK;
end;

procedure DeleteRegKeyValue(Root: DWORD; Key: string; ValueName: string = '');
var
  KeyHandle: HKEY;
begin
  if ValueName = '' then
    RegDeleteKey(Root, PChar(Key));
  if RegOpenKey(Root, PChar(Key), KeyHandle) = ERROR_SUCCESS then
  try
    RegDeleteValue(KeyHandle, PChar(ValueName));
  finally
    RegCloseKey(KeyHandle);
  end;
end;

procedure CreateRegKeyValue(Root: DWORD; const Key, ValueName, Value: string);
var
  Handle: HKey;
  Status, Disposition: Integer;
begin
  Status := RegCreateKeyEx(ROOT, PChar(Key), 0, '',
    REG_OPTION_NON_VOLATILE, KEY_READ or KEY_WRITE, nil, Handle,
    @Disposition);
  if Status = 0 then
  begin
    Status := RegSetValueEx(Handle, PChar(ValueName), 0, REG_SZ,
      PChar(Value), Length(Value) + 1);
    RegCloseKey(Handle);
  end;
  if Status <> 0 then
    raise EOleRegistrationError.CreateRes(@SCreateRegKeyError);
end;

参考!
2009-3-15 20:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
能否提供完整源码?我编译总出错,谢谢
2009-6-20 01:30
0
游客
登录 | 注册 方可回帖
返回
//