Redirecionar paginas web pelo Delphi 7
01/04/2006
0
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
Posts
29/07/2006
Ranyeryfip
30/07/2006
Delphitotal
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..
31/07/2006
Nerdex
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...
31/07/2006
Nerdex
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.
01/08/2006
Nerdex
hWnd := FindWindow(´IEFrame´, Buffer);
por
hWnd:= FindWindow(´ExploreWClass´, nil);
Abraço
01/08/2006
Delphitotal
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..
01/08/2006
Ranyeryfip
:lol:
02/08/2006
Nerdex
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
02/08/2006
Delphitotal
NerdeX vlw pelas dicas .. mais vou desistir :(
Já tentei de tudo mais não consegui ..
Vlw por tudo !!
02/08/2006
Nerdex
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
02/08/2006
Delphitotal
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..
Clique aqui para fazer login e interagir na Comunidade :)