我现在要做一个浏览器,用来浏览特定的网站内容,但是不想让其他人看到网站的详细地址.
初步的设计思想是这样的:
用DELPHI6实现,在form中放入一TwebBrowser控件,屏蔽其鼠标右键的弹出菜单功能,并在单击浏览内容中的超链时使用本浏览器打开而不是用IE.现在的问题是:
1,不知道怎样屏蔽Twebbrowser的右键弹出菜单功能;
2,不知怎样控制单击Twebbrowser控件中所浏览内容中的超链时使用本浏览器打开而不是用IE.请高手们提提建议,此方案是否可行.
感谢!!!

解决方案 »

  1.   

    http://borland.mblogger.cn/aiirii/posts/1758.aspx
      

  2.   

    var
       MouseHook: THandle;
    procedure TForm1.FormCreate(Sender: TObject) ;
    begin
       MouseHook := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId()) ;
    end;procedure TForm1.FormDestroy(Sender: TObject) ;
    begin
       if MouseHook <> 0 then
         UnHookWindowsHookEx(MouseHook) ;
    end;function MouseProc(nCode: Integer; wParam, lParam: Longint): LongInt; stdcall;
    var
       classbuf: array[0..255] of Char;
    const
       ie = 'Internet Explorer_Server';
    begin
       case nCode < 0 of
         True:
           Result := CallNextHookEx(MouseHook, nCode, wParam, lParam)
         False:
             case wParam of
               WM_RBUTTONDOWN, WM_RBUTTONUP:
                 begin
                   GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, classbuf, SizeOf(classbuf)) ;
                   if lstrcmp(@classbuf[0], @ie[1]) = 0 then
                     Result := HC_SKIP
                   else
                     Result := CallNextHookEx(MouseHook, nCode, wParam, lParam) ;
                 end
                 else
                 begin
                   Result := CallNextHookEx(MouseHook, nCode, wParam, lParam) ;
                 end;
             end; //case wParam
       end; //case nCode
    end; (*MouseProc*)
    var
       MouseHook: THandle;
    procedure TForm1.FormCreate(Sender: TObject) ;
    begin
       MouseHook := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId()) ;
    end;procedure TForm1.FormDestroy(Sender: TObject) ;
    begin
       if MouseHook <> 0 then
         UnHookWindowsHookEx(MouseHook) ;
    end;function MouseProc(nCode: Integer; wParam, lParam: Longint): LongInt; stdcall;
    var
       classbuf: array[0..255] of Char;
    const
       ie = 'Internet Explorer_Server';
    begin
       case nCode < 0 of
         True:
           Result := CallNextHookEx(MouseHook, nCode, wParam, lParam)
         False:
             case wParam of
               WM_RBUTTONDOWN, WM_RBUTTONUP:
                 begin
                   GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, classbuf, SizeOf(classbuf)) ;
                   if lstrcmp(@classbuf[0], @ie[1]) = 0 then
                     Result := HC_SKIP
                   else
                     Result := CallNextHookEx(MouseHook, nCode, wParam, lParam) ;
                 end
                 else
                 begin
                   Result := CallNextHookEx(MouseHook, nCode, wParam, lParam) ;
                 end;
             end; //case wParam
       end; //case nCode
    end; (*MouseProc*)
      

  3.   

    禁止鼠标右键菜单的问题基本上已经解决.多谢"aiirii(ari-爱的眼睛)"的指教还剩下一个问题:
    当鼠标左键单击一链接时,有没有方法用指定的浏览程序打开此链接的内容呢,默认的情况是使用IE啊,如果被IE打开的话,Web地址都会被暴露了,而且上一不的工作也是白做了!!!!
      

  4.   

    我很早以前做了一个程序.前短时间重做了. www.yixel.com/files/IEExplorer.rar 可以得到你的地址的
      

  5.   

    to:waterborn
    我这个程序是给客户用的,不是给专业黑客用,所以只要表面上看不到就行
      

  6.   

    to:Eastunfail
    我用过了你的程序了,的确很爽(不仅可以查出很多信息,而且还可以控制IE!!!),但本人并不高兴,因为上面的构思都被打破了!!!
    只要有你那东西,我所隐藏的东西就都被发现了
    我想请教一下,我剩下的问题(控制使用指定的程序打开鼠标左键所点击的链接)
    或者有没有更好的方案???
      

  7.   

    当然,你若是会C++的话,可以封装一下里面的HTML控件,挎平台的,没有用IE内核.
    那个就较之安全了
      

  8.   

    O!
    C++可以解决我的后面那个问题吗?不能太复杂了->我还是个新手[虽然年纪大了点:)]
      

  9.   

    http://dev.csdn.net/Develop/article/19/19627.shtm
      

  10.   

    procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
    var
      newWindow : TForm1;
    begin
      newWindow := TForm1.Create(nil);
      newWindow.Visible := true;
      ppDisp := newWindow.WebBrowser1;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://www.applevb.com');
    end;
      

  11.   

    说调了,那个HTML控件是 wxWidgets的, Sourceforge有源码.
      

  12.   

    to:TechnoFantasy(冰儿马甲www.applevb.com)
    遇到问题了:
    我按照你的代码加入到我的程序中,编译通过了.
    但是运行的时候,新窗是空白的,不能显示链接了内容.
    怎样才能将新鼠标左键单击的链接内容显示在新窗口中啊???
      

  13.   

    procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
    var
      newWindow : TForm1;
    begin
      newWindow := TForm1.Create(nil);
      newWindow.Visible := true;
      ppDisp := newWindow.WebBrowser1.Application;
    end;
    这样子就可以了哈