Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Obtener URLs abiertas de Internet Explorer (https://www.clubdelphi.com/foros/showthread.php?t=56933)

Draker 31-05-2008 19:41:53

Obtener URLs abiertas de Internet Explorer
 
Buenas tardes, Utilizando el siguiente codigo, puede saberse la URL de la pagina del IE.

Código Delphi [-]
function GetText(WinHandle: THandle): string;
var
  P: array[0..256] of Char;
begin
  P[0] := #0;
  GetWindowText(WinHandle, P, 255);
  if P[0] = #0 then Result := ''
  else
    Result := P;
end;

procedure TformMenuPrincipal.Button1Click(Sender: TObject);
var 
  Hx: THandle;
  P: array[0..256] of Char;
  Item: TListItem;
begin
  lsListaVentanas.Items.Clear;
  Hx := FindWindow(nil, nil);
  GetClassName(Hx, P, SizeOf(P));
  if string(P) = 'IEFrame' then
  begin
    Item := lsListaVentanas.Items.Add;
    Item.SubItems.Add(IntToStr(Hx));
    Item.Caption := GetText(Hx);
  end;
  while Hx <> 0 do
  begin
    Hx := GetWindow(Hx, GW_HWNDNEXT);
    GetClassName(Hx, P, SizeOf(P));
    if string(P) = 'IEFrame' then
    begin
      Item := lsListaVentanas.Items.Add;
      Item.SubItems.Add(IntToStr(Hx));
      Item.Caption := GetText(Hx);
    end;
  end;
end;

El problema es que ahora con el IE7, pues utiliza multiples pestañas por lo cual este codigo no es efectivo, la pregunta es:
De que manera puedo obtener la URL de todas las Tabs del IE?
De antemano mil gracias..

cHackAll 02-06-2008 15:41:56

Código Delphi [-]
procedure EnumTabs(hWnd: Cardinal; List: TStrings); // IE7
var Buffer: array [0..255] of Char;
begin
 while LongBool(hWnd) do
  begin
   GetClassName(hWnd, @Buffer, SizeOf(Buffer) - 1);
   if not LongBool(lstrcmp(@Buffer, 'TabWindowClass')) then
    begin
     GetWindowText(hWnd, @Buffer, SizeOf(Buffer) - 1);
     List.Add(PChar(@Buffer));
    end;
   hWnd := GetWindow(hWnd, GW_HWNDNEXT);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 EnumTabs(GetWindow(FindWindow('IEFrame', nil), GW_CHILD), ListBox1.Items);
end;

Draker 03-06-2008 15:24:37

cHackAll, eres grande, funciona a la perfección.
Me gustaria hacerte otra pregunta, mira aparte del IE7 se utiliza el Maxthon, para el IE7 como tu bien lo mencionas la clase para el Tab es: TabWindowClass.
Pero para el Maxthon (Maxthon2_Frame) no logro encontrarle la clase que le corresponda, podrias echarme la mano en esto?

Te comento que utilizando el WindowSE he visto esto para el IE7:


Pero para el Maxthon me presenta esto:



Desde ahora mil gracias....

cHackAll 18-06-2008 22:00:23

Efectivamente no se puede obtener el resultado esperado de la misma forma, sin embargo; SI se crean un grupo de objetos del IE por cada página abierta;

+Shell DocObject View
++Internet Explorer_Server

Entonces lo que necesitas hacer es obtener un objeto OLE-COM del IE desde un Window Handle usando algun método; AccessibleObjectFromWindow.

Suerte

JuanCruz 27-05-2010 07:10:58

Buenas noches.
También he probado este código y funciona de maravilla. Abusando de su gentil respuesta quería consultar lo siguiente: con esta función, obtengo el título de la solapa y puedo pasarle el codigo PostMessage(hHwnd, WM_QUIT, 0, 0); para cerrarla en caso de que no sea una página que no esté autorizada para poder ver. En mi sistema tengo un archivo de texto solo con los sitios permitidos uno bajo el otro, con la función obtengo el título de la solapa, la comparo y en caso de no estar permitida la cierro. Mi problema se presenta cuando tengo varias páginas permitidas que surgen de una primera permitida (estarían todas permitidas) por ahora lo soluciono agregando en el archivo de texto uno a uno los nombres pero quisiera saber si lo puedo hacer como una regla ejemplo: paginapermitida/* (donde /* significa todas las que se abran desde esta primera).
Espero haber redactado claramente y de antemano estoy muy agradecido
Saludos


La franja horaria es GMT +2. Ahora son las 23:41:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi