Redirecionar paginas web pelo Delphi 7

01/04/2006

0

Holla a todos,

gostaria de saber como posso redirecionar uma pagina web pelo Delphi 7.
Estou fazendo um programa de restrição de navegação, nele eu já consigo fechar as paginas que nao estao restristas. Mais covenhamos, fechar a pagina web nao é muito legal. Dessa forma queria redirecionar essa pagina web para uma pagina offline dizendo que a pagina esta bloqueada.
Por esse motivo gostaria de saber qual seria a função da API do Windwos que posso utilizar para redirecionar uma pagina web.

Eu tentei usar o ShellExecute passando por parametro o Handle da janela que quero fechar mais o problema é, quando tenho mais de uma pagina aberta ele pega sempre a ultima janela, desprezando o HANDLE que eu passei.

Se alguem puder me ajudar agradeço,
Sem mais,
Antonio.


Janbaceiredo

Janbaceiredo

Responder

Posts

29/07/2006

Delphitotal

up...


Responder

29/07/2006

Ranyeryfip

Olá amigo DelphiTotal, o nosso amigo amigo janbaceiredo praticamente jah respondeu sua pergunta e a resposta está neste mesmo tópico, no site about.delphi.com tem uma dica que unindo com a janbaceiredo fica blz o sistema, de bloqueio de url, agora é você usar sua criatividade e sair para o abraço.


Responder

30/07/2006

Delphitotal

Sim! eu encontrei essas funções lá no http://delphi.about.com/ >

http://delphi.about.com/library/weekly/aa060303b.htm

{ Retorna endereço das url´s ativas no IE }

function GetUrlFromIE (Handle: THandle; List: TStringList):
 boolean; stdcall;
var
  hWndIE, hWndIEChild : HWND;
  Buffer : array[0..255] of Char;
begin
  //get the window caption
  SendMessage(Handle, WM_GETTEXT, 255, integer(@Buffer[0]));
  //look for the Internet Explorer window with "Buffer" caption
  hWndIE := FindWindow(´IEFrame´, Buffer);
  if hWndIE > 0 then
begin
    //try to get a handle to IE´s toolbar container
    hWndIEChild := FindWindowEx(hWndIE, 0, ´WorkerW´, nil);
    if hWndIEChild > 0 then
    begin
      //get a handle to address bar
      hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ReBarWindow32´, nil);
      if hWndIEChild > 0 then
      begin
        //finally, locate combo box and add its text to the list
        hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ComboBoxEx32´, nil);
        if hWndIEChild > 0 then
        begin
          SendMessage(hWndIEChild, WM_GETTEXT, 255, integer(@Buffer));
          //List.AddObject(Buffer,TObject(hWndIE));
          List.Add(Buffer)
        end;
      end;
    end;
  end;
  //continue enumeration
  Result :=True;
end; (*GetUrlFromIE*)


implementei o código é talz .. retorna blz as urls ..

mais não sei verificar por exemplo usando essa função verificar se a url playboy (http://www.playboy.com.br) está ativa se estiver usar a função
do janbaceiredo SetUrlFromIE(Handle: THandle); stdcall;

se alguém puder ajudar..


Responder

30/07/2006

Delphitotal

[b:0c8bd7a1b4]up[/b:0c8bd7a1b4]


Responder

30/07/2006

Delphitotal

[b:250cfadd23]up[/b:250cfadd23]


Responder

30/07/2006

Delphitotal

alguem?


Responder

31/07/2006

Nerdex

DelphiTotal... como te disse eu fiz assim, postarie só o que interessa ...: :shock: Ok? ...

uses
  Activex, Shdocvw_tlb, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, SHDocVwEvents, MSHTML_TLB, ComCtrls, ShellAPI, ExtCtrls;

type
  TForm1 = class(TForm)
    WBEvents: TSHDocVwDWebBrowserEvents2;
    ShellWinEvents: TSHDocVwDShellWindowsEvents;
    ...

var
  Form1: TForm1;
  ShellWin: ShDocVw_Tlb.IShellWindows;
  Connection: integer;
  ...

procedure InterfaceConnect(const Source: IUnknown; const IID: TIID; 
  const Sink: IUnknown; var Connection: Longint);
var
  CPC: IConnectionPointContainer;
  CP: IConnectionPoint;
begin
  Connection := 0;
  if Succeeded(Source.QueryInterface(IConnectionPointContainer, CPC)) then
    if Succeeded(CPC.FindConnectionPoint(IID, CP)) then
      CP.Advise(Sink, Connection);
end;

procedure TForm1.ShellWinEventsWindowRegistered(Sender: TObject; lCookie: Integer);
begin
  with (ShellWin.Item(ShellWin.Count - 1) as IWebbrowser2) do
  InterfaceConnect(ShellWin.Item(ShellWin.Count - 1) as IWebBrowser2, DWebBrowserEvents2, WBevents, Connection);
end;

procedure TForm1.WBEventsBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
//Aqui pega evento quando o cara "insere/informa" a URL
end;

//Inicia o serviço
procedure TForm1.BtnStartClick(Sender: TObject);
begin
ShellWin:= CoShellWindows.Create;
ShellWinEvents.Connect(ShellWin);
for ib:= 0 to ShellWin.Count - 1 do
  InterfaceConnect(ShellWin.Item(ib) as IWebbrowser2, DwebbrowserEvents2, WBevents, Connection);
end;

procedure TForm1.WBEventsDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
//Evento de documento (home page) carregada
end;


Existem dezenas de outros eventos para o objeto TSHDocVwDWebBrowserEvents2 que podem ser interceptadas... para qualquer instância do IE existente na máquina, conseqüentemente, sendo tanto pelo internet explorer quanto o win explorer.

P.S.: Acredito que esse meu proj. evita de ter que monitorar o caption da janela via Handle com um Timer...: :evil: ... Sem querer menosprezar os companheiros, mas acho a idéia um pouco gambiarrística...


Responder

31/07/2006

Nerdex

NerdeX tenta isso, em vez de você mandar procurar por FindWindow(´IEFRAME´, etc), você manda procurar por FindWindow(´ExploreWClass´, etc), o restante do codigo é o mesmo que você usou para o IE.


Pegando o valor de Handle por IEFrame para o windows explorer não consegui postar o valor no ComboBox - Acredito que os nomes para as classes (Objetos) sejam diferentes das do IE.


Responder

01/08/2006

Nerdex

Consegui redirecionar via Handle também para o Win Explorer, para isto basta alterar a linha:

hWnd := FindWindow(´IEFrame´, Buffer);


por

hWnd:= FindWindow(´ExploreWClass´, nil);


Abraço


Responder

01/08/2006

Delphitotal

NerdeX,

Cara ainda não consegui resolver meu problema... estou tentando pelo endereço tpo (www.playboy.com.br)...

tpo se tivesse como

Janela := FindWindow(´IEFrame´, ´www.playboy.com.br´);
SetUrlFromIE(Janela);

estava querendo algo do tpo .. mais ainda não consegui..


Responder

01/08/2006

Ranyeryfip

Olá NerdeX, foi isso mesmo que eu lhe disse na mensagem anterior.

:lol:


Responder

02/08/2006

Nerdex

NerdeX, Cara ainda não consegui resolver meu problema... estou tentando pelo endereço tpo (www.playboy.com.br)... tpo se tivesse como Janela := FindWindow(´IEFrame´, ´www.playboy.com.br´); SetUrlFromIE(Janela); estava querendo algo do tpo .. mais ainda não consegui..


Aí que tá cara! O caption da janela poderá não condizer, ou nunca, com o endereço Url. No exemplo que postei acima, eu pego a Url do browser e/ou do win explorer, atravéz de 2 respectivos eventos, que são: BeforeNavigate e DocumentComplete.

No meu programa eu tenho uma lista de ´palavras´ liberadas ex:

Terra
Uol
Devmedia

Aí eu efetuo quebras de string na Url capturada, e efetuo comparações com os ítens da lista de ´permitidos´. Se não existir na lista, identifico uma Url proibida, aí sim cara! ... é que eu uso HANDLE somente para redirecionamento... entende?

Flw


Responder

02/08/2006

Delphitotal

entendi + ou - ... :?

NerdeX vlw pelas dicas .. mais vou desistir :(
Já tentei de tudo mais não consegui ..

Vlw por tudo !!


Responder

02/08/2006

Nerdex

Total... Olha só a diferença:

Agora nesta janela do browser que eu estou respondendo este tópico, aparece no caption da janela o seguinte (sem as áspas): ´Fórum DevMedia :: Responder - Microsoft Internet Explorer´

Janela := FindWindow(´IEFrame´, ´www.playboy.com.br´);


Sendo assim, a variável Janela só será maior que 0 (zero) se o segundo parâmetro da função for: ´Fórum DevMedia :: Responder - Microsoft Internet Explorer´ (sem as áspas).

O valor (string) da Url é: ´http://forum.clubedelphi.net/posting.php?mode=reply&t=75551&sid=9042b64db5648f109caf98787607b48e´ (sem aspas) que está no ComboBox do browser.

Amigo? Tu notou a diferença das coisas? ... Visse que são nomes distintos, e por captura de caption da janela, não funciona legal...?

Abraço


Responder

02/08/2006

Delphitotal

Entendi agora.. :wink:

NerdeX, por captura de caption da janela não ta dando certo pq depois do titulo da página tem o ´- Microsoft Internet Explorer´ ou seja os funcionarios daqui da empresa ficam mudando direto o nome que aparece depois do Titulo :

exemplo .. no computador da Ana ele personalizou o IE dela é colocou Navegador ANA .. entende?

dai se eu mandar ele verificar

var
Janela : THandle;
begin
Janela := FindWindow(nil, ´Sexo - Microsoft Internet Explorer´);
if Janela <> 0 then
begin
SetUrlFromIE(Janela);

não vai dar certo pq o programa vai verificar por Microsoft Internet Explorer no titulo da página..

Consegue entender?
Por isso ta dificil..


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar