Ver Mensaje Individual
  #2  
Antiguo 17-06-2008
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Reputación: 20
Black_Ocean Va por buen camino
Hola,

Aparte de errores de sintaxis en la comparación del If, de no estar declarada la función TForm1.GetURL_IE como pública o privada en el form, ese código no funciona ya que tiene un error de especificación de clase de objeto de IE.

Te lo he arreglado para que funcione en Internet Explorer 5.0 y 6.0 e implementado para Unicode, no se si funcione con IE 7 porque no lo tengo instalado para probarlo.

Código Delphi [-]
function Obtener_URL_Actual_IE: WideString;
var
  hIeWindow, hWorkerW, hToolbar, hComboBoxEx, hComboBox, hEdit: HWND;
  Buffer: array[0..255] of Char;
begin
  hIeWindow := FindWindow('IEFrame', nil);
  if hIeWindow > 0 then
  begin
    hWorkerW := FindWindowEx(hIeWindow, 0, 'WorkerW', nil);
    hToolbar := FindWindowEx(hWorkerW, 0, 'ReBarWindow32', nil);
    hComboBoxEx := FindWindowEx(hToolbar, 0, 'ComboBoxEx32', nil);
    hComboBox := FindWindowEx(hComboBoxEx, 0, 'ComboBox', nil);
    hEdit := FindWindowEx(hComboBox, 0, 'Edit', nil);
    Sendmessage (hEdit, WM_GETTEXT, Length(Buffer), Longint(@Buffer));
    Result := WideString(Buffer);
  end
  else
  begin
    Result := ' ';
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(Obtener_URL_Actual_IE);
end;

Y lo correcto en este caso no es declarar la función Obtener_URL_Actual_IE como pública o privada del form porque no es un evento del formulario, sino que es una simple función para obtener un dato externo, por lo que debes declararla debajo de Implementation

En todo caso, hay otras formas más digamos "adecuadas" para obtener enlaces del navegador, ya que esta función sólo obtendrá la URL de la primera ventana que encuentre la función por el handle devuelto. Si hay más ventanas de IE abiertas, no las devolverá. Sólo devolverá una de ellas abierta. Para devolver la URL de todas las ventanas abiertas de clase IEFrame, tendrás que usar la función EnumWindows e implementarla.

Para IE 7 faltará más implementación, ya que aparte de trabajar con múltiples ventanas, trabaja con pestañas, y como no tengo el IE 7 instalado, no te puedo ayudar para esa versión .

Saludos y buena suerte. Cualquier otra consulta acerca del código no dudes en hacerla aquí mismo.

Última edición por Black_Ocean fecha: 17-06-2008 a las 04:40:20.
Responder Con Cita