Fórum Pegar URL Ativa no Internet Explorer #4199

31/03/2009

0

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

Responder

Posts

31/03/2009

Wesley Yamazack

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
 


Responder

Gostei + 0

31/03/2009

Alexandre Furlan

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...
Responder

Gostei + 0

31/03/2009

Wesley Yamazack

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
Responder

Gostei + 0

31/03/2009

Alexandre Furlan

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
Responder

Gostei + 0

31/03/2009

Wesley Yamazack

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
Responder

Gostei + 0

31/03/2009

Alexandre Furlan

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
Responder

Gostei + 0

31/03/2009

Wesley Yamazack

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
 
Responder

Gostei + 0

31/03/2009

Alexandre Furlan

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
Responder

Gostei + 0

31/03/2009

Wesley Yamazack

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
Responder

Gostei + 0

31/03/2009

Alexandre Furlan

Seria algo como

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





Responder

Gostei + 0

31/03/2009

Wesley Yamazack

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
Responder

Gostei + 0

02/04/2009

Wesley Yamazack

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,

Responder

Gostei + 0

02/04/2009

Alexandre Furlan

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
Responder

Gostei + 0

03/04/2009

Wesley Yamazack

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
Responder

Gostei + 0

03/04/2009

Alexandre Furlan

Ola,


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

podemos fechar o Topico sim

um forte abraço
Responder

Gostei + 0

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

Aceitar