Pegar URL Ativa no Internet Explorer

31/03/2009

Ola,

Gostaria de sabe se existe algum meio de pegar a url ativa do Internet Explorer e jogar isto
em uma string????

Sei que por meio do DDEMAN se faz isso, mas quero saber se existe alguma outra alternativa a isto???

de nao utilizar o DDE

Agradeço desde já.

Abraços..
Alexandre Furlan

Alexandre Furlan

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

31/03/2009

Olá Alexandre.
  Bom dia.
  Gostaria de saber qual real motivo você não gostaria de usar DDEMAN ?
  Seria porque a função retorna .
          "http://www.google.com.br/","Google"

  E no caso você queria pegar somente o  http://www.google.com.br ? Seria isso ?
  Aguardo retorno

Att,

Wesley Y
 


GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Ola,

Sei que posso tratar a string e retirar as " e , mas nao queria utilizar ddeman...

Sei que é possivel pegar a url pela classe do internet explorer poderia me ajudar nisso....

Agradeço desde já

Abraços...
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Ola Alexandre,
   Não entendi o motivo de você não usar DDEMAN? Por que não ? Se o que você quer fazer ele já te atende ?
   Mas bem vamos lá, qual seria a classe do Internet Explorer? Me passe para eu poder analizar a mesma e te retornar com a solução.

Att,

Wesley Y
GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Tenho um codigo em vb vou lhe mostrar!!!

mas como nao sou programador em vb e minha aplicação esta em delphi... 

Option ExplicitPublic Function GetWindowStructure(window_hwnd As Long, Optional ByVal Indent As String = "") As String    Dim txt, buf As String    Dim buflen, child_hwnd, children() As Long    Dim num_children, i As Integer    buflen = 256    buf = Space$(buflen - 1)    buflen = GetClassName(window_hwnd, buf, buflen)    buf = Left$(buf, buflen)    txt = Indent & buf    If buf = "Edit" Then txt = txt & " (" & WindowText(window_hwnd) & ")"    txt = txt & vbCrLf    num_children = 0    child_hwnd = GetWindow(window_hwnd, GW_CHILD)    Do While child_hwnd <> 0        num_children = num_children + 1        ReDim Preserve children(1 To num_children)        children(num_children) = child_hwnd
        child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)    Loop    For i = 1 To num_children        txt = txt & GetWindowStructure(children(i), Indent & "    ")    Next i
    GetWindowStructure = txtEnd FunctionPublic Function WindowText(window_hwnd As Long) As String    Dim txtlen As Long    Dim txt As String    WindowText = ""    If window_hwnd = 0 Then Exit Function    txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)    If txtlen = 0 Then Exit Function    txtlen = txtlen + 1    txt = Space$(txtlen)    txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)    WindowText = Left$(txt, txtlen)End Function
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean    Dim buf As String * 1024    Dim length, lPonto1, lPonto2 As Long    Dim sConteudo, s_Ndeg, title As String    length = GetWindowText(app_hwnd, buf, Len(buf))    title = Left$(buf, length)    If InStr(title, "Internet") > 0 Then        sConteudo = GetWindowStructure(app_hwnd)            If (InStr(sConteudo, "Edit") > 0) Then                lPonto1 = InStr(sConteudo, "Edit") + 6                lPonto2 = InStr(lPonto1, sConteudo, vbCrLf) - 1                s_Ndeg = Mid$(sConteudo, lPonto1, lPonto2 - lPonto1)            End If        EnumProc = 0    Else        EnumProc = 1    End IfEnd Function

Sera que teria como portar isso para delphi... essa funcão em vb retorna corretamento a url ativa no internet explorer...
Agradeço desde já
Abraços
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Olá Alexandre,
  Analisando o código em VB, é justamente o que a função da unit ddeman faz, no caso o componente TDDEClientConv. A diferença é que já esta tudo no componente e o que você tem que fazer é apenas usar, no caso você esta pegando a url + o nome da pág, mas isso você falou que sabe retirar e pegar somente a url.
   Então não vejo porque você não usar a mesma já que ela faz a mesma coisa do seu código em VB.


Att,

Wesley Y
GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Acontece que em alguns casos

o dde nao consegue me resultar em nada, ou seja me traz um valor nulo por isso
de pegar diretamente pela classe do ie, ai nao teria erro

Abraços
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Olá Alexandre,
  Bom a única forma dele pegar a URL em branco, seria quando o teu IE não estivesse aberto, ou nenhuma página estivesse na barra de endereços. Mas como você disse que não consegue capturar algumas vezes, me de um exemplo.

Att,

Wesley Y
 
GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Wesley

Acho que você não esta me intendendo, estou procurando uma forma alternativa de nao usar o dde
pois o mesmo nao funciona em uma dll, caso eu queira portar as minhas funcoes...

Será que intende agora....

Abraços,
Aguardo Retorno
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Olá Alexandre,
  Se você tivesse explicado antes que não funcionava na dll eu nao teria insistido no assunto, mas agora que falou da dll.
  Você disse que tem uma classe da Internet Explorer, me passe ela para eu poder analisar. Já que o ddn não serve para você. Pois fora esta forma eu não conheço


Att,

Wesley Y
GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Seria algo como

  Identy := GetForeGroundWindow;
  hb := windows.FindWindowEx(Identy,0,'TabWindowClass',nil) or windows.FindWindowEx(Identy,0,'Shell DocObject View',nil);





GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Alexandre,
  O que você me passou, ele pega o Handle de uma janela, qualquer, não teria como você pegar assim a url da mesma. Gostaria de saber qual erro que da quando você usa ddeman, derrepente usando o mesmo conseguiriamos resolver o problema na DLL. Fara isso não tem como capturar não, pois o que você me passou foi um código e não a classe como você disse que sabia que tinha no delphi.

Att,

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Alexandre,
  Gostaria de saber mais informações, sobre a sua intenção com a DLL, teria como gravar uma video me mostrando o erro que acontece na mesma, para podermos resolver o problema ?

Att,

GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Ola,

realmente e complicado mas consegui resolver o problema utilizando este codigo


Function Site(Ser: string): String;
  var  C: TDDEClientConv; 
  temp:PChar;begin 
  Result := ''; 
  C:= TDDEClientConv.Create( nil );
 with C do begin
  SetLink(Ser,'WWW_GetWindowInfo');
  temp := RequestData('0xFFFFFFFF');
  Result := StrPas(temp);
  StrDispose(temp);
  CloseLink;
  end; 
 C.Free;
end;

mas eu agradeço a atenção caso, você tenha esse codigo
um pouco melhorado e poder compartilhar comigo ficarei grato também

um forte abraço
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Ola, 
  Meu caro, sua função é interessante, porém se você analisar, você esta usando o TDDEClientConv, e o mesmo esta na Unit DdeMan. O que esta função faz é justamente o que estavamos conversando sobre o usar a unit.
  Quanto a melhorar eu te recomendo

C.Free;

 por

FreeAndNil(C);

  Quanto ao restante esta tudo tranquilo. Podemos fechar o Chamado ?

Att,

Wesley Y
GOSTEI 0
Alexandre Furlan

Alexandre Furlan

31/03/2009

Ola,


Agradeço a sua Atenção e a Dica....

podemos fechar o Topico sim

um forte abraço
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/03/2009

Olá,  

  Chamado foi concluído, estamos sempre a disposição.

Att,

Wesley Y
GOSTEI 0
POSTAR