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
01/04/2006
Kroki
Não posso passar o código completo para abrir no IE,mas estude esse exemplo onde é aberta uma página numa janela do Windows(abra uma pasta qualquer e deixa aberta);
procedure TForm1.Button1Click(Sender: TObject);
Var
Explorer, Worker, Bar, ComboEx, Combo, Edit : HWND;
Url : String;
begin
Edit := 0;
Explorer := FindWindow(´CabinetWClass´, nil);
If Explorer <> 0 Then Begin
Worker := FindWindowEx(Explorer, 0, ´WorkerA´, nil);
If Worker <> 0 Then Begin
Bar := FindWindowEx(Worker, 0, ´ReBarWindow32´, nil);
If Bar <> 0 Then Begin
ComboEx := FindWindowEx(Bar, 0, ´ComboBoxEx32´, nil);
If ComboEx <> 0 Then Begin
Combo := FindWindowEx(ComboEx, 0, ´ComboBox´, nil);
If Combo <> 0 Then Begin
Edit := FindWindowEx(Combo, 0, ´Edit´, nil);
End;
End;
End;
End;
End;
If Edit <> 0 Then Begin
showmessage(´Transferindo...´);
Url := ´www.kaillera.com´;
SendMessage(Edit, WM_SETTEXT, 0, Integer(Url));
SendMessage(Edit, WM_KEYDOWN, VK_RETURN, $011C001);
End;
end;
Acho que vc não vai ter dificuldade em modificar para oque vc deseja.
Espero ter ajudado.
01/04/2006
Janbaceiredo
vc me ajudou muito. Consegui setar barra de endereço do IE para ser redirecionado para a pagina de restrição.
Só estou tendo somente um problema. A constante virtual VK_RETURN não esta realizando o <ENTER> no ComboBoxEx32.
O endereço de redirecionamento fica fica todo selecionado no ComboBoxEx32 a espera do VK_RETURN, mais ele nao é realizado.
Você poderia me dar mais essa ajuda para poder resolver esse problema?
Estou mandando o código que fiz.
function SetUrl(Handle: THandle):Boolean; stdcall; var hWndIE, hWndIEChild : HWND; Buffer : array[0..255] of Char; Url: String; begin Url:= ´http://janbaceiredo.homelinux.com/Restrito.php´; SendMessage(Handle, WM_GETTEXT, 255, integer(@Buffer[0])); hWndIE := FindWindow(´IEFrame´, Buffer); if hWndIE > 0 then begin hWndIEChild:= FindWindowEx(hWndIE, 0, ´WorkerW´, nil); if hWndIEChild > 0 then begin hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ReBarWindow32´, nil); if hWndIEChild > 0 then begin hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ComboBoxEx32´, nil); if hWndIEChild > 0 then begin SendMessage(hWndIEChild, WM_SETTEXT, 255, Integer(Url)); SendMessage(hWndIEChild, WM_KEYDOWN, VK_RETURN, $011C001); end; end; end; end; end;
Sem mais,
Antônio.
02/04/2006
Kroki
Uses ...DDEman;
procedure TForm1.TrocaUrl;
var
DDE:TDDEClientConv;
begin
DDE:=TDDEClientConv.Create(Self);
with dde do begin
if DDE.SetLink(´IExplore´,´WWW_OpenURL´) then
RequestData(´http://janbaceiredo.homelinux.com/Restrito.php,,0xFFFFFFFF,0x3,,,´);
end;
DDE.Free;
end;
02/04/2006
Janbaceiredo
Mas essa segunda solução proposta não resolve o meu problema. :(
procedure TForm1.TrocaUrl; var DDE:TDDEClientConv; begin DDE:= TDDEClientConv.Create(Self); with dde do begin if DDE.SetLink(´IExplore´,´WWW_OpenURL´) then RequestData(´http://janbaceiredo.homelinux.com/Restrito.php,,0xFFFFFFFF,0x3,,,´); end; DDE.Free; end;
:?: :?: Porque :?: :?:
:arrow: Bom, isso porque posso ter mais de uma janela do IE aberta ao mesmo tempo. Essa segunda solução proposta por você, pega sempre a ULTIMA janela aberta e redireciona para o link que desejo. Isso eu já conseguia usando o ShellExecute dessa forma:
uses ShellApi; ... ShellExecute(Handle, ´open´, ´http://janbaceiredo.homelinux.com/Restrito.php´, nil, nil, SW_SHOWNORMAL);
Tanto o ShellExecute e a solução proposta por você pega sempre a ultima janela aberta do IE e redireciona.
Eu preciso redirecionar somente a pagina que o usuario tentar acessar:
Vamos ao exemplo:
:arrow: O usuario possui tres paginas do IE aberta sendo elas:
- www.uol.com.br
- www.terra.com.br
- www.clubedelphi.net
:arrow: Vamos supor que o usuario abra mais duas paginas, são elas:
- www.pornografia.com.br
- www.clubedelphi.net/forum
Nesse exemplo preciso redirecionar a pagina numero 4.
:?: :?: Porque :?: :?:
Bom, porque defini que o endereço [b:9759b2da0e][u:9759b2da0e]www.pornografia com.br[/u:9759b2da0e][/b:9759b2da0e]
é restrito e não devera ser acessado.
Dessa forma preciso redirecionar somente a pagina numero 4 para o endereço [b:9759b2da0e][u:9759b2da0e]http://janbaceiredo.homelinux.com/Restrito.php[/u:9759b2da0e][/b:9759b2da0e].
Dessa forma a sua primeira sugestão é mais interessante.
Esse codigo que momentei com sua dica é perfeito para mim. Porque passou o HANDLE da janela que desejo redirecionar.
Meu unico problema é com relação a tecla <ENTER> [b:9759b2da0e]VK_RETURN[/b:9759b2da0e] que não consigo que ela seja capitada. Já tentei com PostMessage, mas também não funcionou. :?
Se você puder me ajudar com relação essa tecla ficaria muito grato.
Sem mais,
Antônio.
02/04/2006
Janbaceiredo
consegui resolver meu problema. Adicionei mais duas verificaçoes nos campos [b:3213e92a14]COMBOBOX[/b:3213e92a14] e [b:3213e92a14]EDIT[/b:3213e92a14].
Dessa forma consegui fazer a aplicação simular o <Enter> para redirecionar a pagina.
Abaixo segue o codigo atualizado e devidamente comentado para quem precisar da mesma funcionalidade.
{***************************************************************************** * Procedimento para setar a URL a ser redirecionada * ****************************************************************************} procedure SetUrlFromIE(Handle: THandle); stdcall; var hWndIE, hWndIEChild : HWND; Buffer : array[0..255] of Char; Url: String; begin Url:= ´http://janbaceiredo.homelinux.com/Restrito.php´; // Pega o Caption da Janela SendMessage(Handle, WM_GETTEXT, 255, lParam(@Buffer[0])); // Procura pela janela do Internet Explorer com o Buffer do Caption hWndIE := FindWindow(´IEFrame´, Buffer); If hWndIE > 0 Then Begin // Pega o Handle do container do Internet Explorer hWndIEChild:= FindWindowEx(hWndIE, 0, ´WorkerW´, nil); If hWndIEChild > 0 Then Begin // Pega o Handle da Barra de Endereço do Internet Explorer hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ReBarWindow32´, nil); If hWndIEChild > 0 Then Begin // Pega o Handle do ComboBoxEx32 do Internet Explorer hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ComboBoxEx32´, nil); If hWndIEChild > 0 Then Begin // Pega o Handle do ComboBox do Internet Explorer hWndIEChild := FindWindowEx(hWndIEChild, 0, ´ComboBox´, nil); If hWndIEChild > 0 Then Begin // Pega o Handle do Edit do Internet Explorer hWndIEChild := FindWindowEx(hWndIEChild, 0, ´Edit´, nil); If hWndIEChild > 0 Then Begin // Seta a URL no campo Edit do Internet Explorer SendMessage(hWndIEChild, WM_SETTEXT, 0, lParam(Url)); // Simula o precionamento da tecla <Enter> // Pode ser usando tanto VK_RETURN ou $D PostMessage(hWndIEChild, WM_KEYDOWN, $D, $1c0001); End; // Fim - Verifica retorno Edit end; // Fim - Verifica retorno Combo end; // Fim - Verifica retorno ComboBoxEx32 end; // Fim - Verifica retorno ReBarWindow32 end; // Fim - Verifica retorno WorkerW end; // Fim - Verifica retorno IEFrame end;
Value pela ajuda,
Sem mais,
Antônio.
02/04/2006
Kroki
Não se esqueça que vc deve fazer uma verificação tambem junto com um Handle ´CabinetWClass´ e fechá-lo ou a URL proibida ao ser digitada em uma janela qualquer vai abrir.
03/04/2006
Paullsoftware
12/04/2006
Paullsoftware
15/05/2006
Paullsoftware
16/05/2006
Kroki
Fala oque vc ker pra ver se da para simplificar.
16/05/2006
Paulocesar1301
fiz uma procedure, coloquei em um timer que já existe em um serverzinho que funciona nas máquinas de minha rede e funfou beleza...
...alguns que já tentaram acessar alguns sites proibidos ficaram p**** da vida :lol: ... mas o chefe adorou a novidade...
VLW Clubedelphi e associados
Abraços e Bons Códigos :wink:
18/07/2006
Nerdex
A parte mais cruacial eu fiz hoje. Estou interceptando os eventos de
´OnChanges e OnEnters´ nas URLs do ComboBox do IE e trantando, onde, se for um site proibido, eu redireciono. Para isto utilizo estas 2 classes da TLB do Shdocvw:
WBEvents: TSHDocVwDWebBrowserEvents2;
ShellWinEvents: TSHDocVwDShellWindowsEvents;
Tudo funciona perfeitamente, mas detalhe: SÓ ESTÁ FUNCIONANDO NO BROWSER... Assim, minha dúvida é o seguinte: A solução acima pode ser adaptada para monitorar o Explorer também, pois utilizando o Explorer, como Browser nada fica monitorado e o meu prgrama vai pro espaço...
Poderia, alguém me ajudar?
18/07/2006
Ranyeryfip
29/07/2006
Delphitotal
var
Janela : THandle;
begin
Janela := FindWindow(nil, ´: : : PLAYBOY.COM.BR : : : - Microsoft Internet Explorer´);
SetUrl(Janela);
blz funciona perfeito .. mais não está servindo pra mim .. não teria como usar pelo endereço? ex: www.playboy.com.br em vez de pegar a janela?
29/07/2006
Delphitotal
*não teria como [b:32c4cb196c]pegar[/b:32c4cb196c] pelo endereço? ex: www.playboy.com.br em vez de pegar a janela?
Clique aqui para fazer login e interagir na Comunidade :)