Fórum Pegar URL Ativa no Internet Explorer #4199
31/03/2009
0
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
Curtir tópico
+ 0Posts
31/03/2009
Wesley Yamazack
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
31/03/2009
Alexandre Furlan
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
31/03/2009
Wesley Yamazack
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
31/03/2009
Alexandre Furlan
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
31/03/2009
Wesley Yamazack
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
31/03/2009
Alexandre Furlan
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
31/03/2009
Wesley Yamazack
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
31/03/2009
Alexandre Furlan
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
31/03/2009
Wesley Yamazack
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
31/03/2009
Alexandre Furlan
Identy := GetForeGroundWindow;
hb := windows.FindWindowEx(Identy,0,'TabWindowClass',nil) or windows.FindWindowEx(Identy,0,'Shell DocObject View',nil);
Gostei + 0
31/03/2009
Wesley Yamazack
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
02/04/2009
Wesley Yamazack
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
02/04/2009
Alexandre Furlan
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
03/04/2009
Wesley Yamazack
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
03/04/2009
Alexandre Furlan
Agradeço a sua Atenção e a Dica....
podemos fechar o Topico sim
um forte abraço
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)