Узнать какая вкладка активна в браузере
От: BlackEric http://black-eric.lj.ru
Дата: 17.06.10 19:37
Оценка:
А можно узнать какая вкладка активна в браузере? И как отследить переключение?

Интересуют Opera, Firefox, Chrome и IE >7
https://github.com/BlackEric001
Re: Узнать какая вкладка активна в браузере
От: BlackEric http://black-eric.lj.ru
Дата: 17.06.10 20:00
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>А можно узнать какая вкладка активна в браузере? И как отследить переключение?


BE>Интересуют Opera, Firefox, Chrome и IE >7


Или открытый URL получить
https://github.com/BlackEric001
Re: Узнать какая вкладка активна в браузере
От: Dimonka Верблюд  
Дата: 18.06.10 13:14
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>А можно узнать какая вкладка активна в браузере? И как отследить переключение?


BE>Интересуют Opera, Firefox, Chrome и IE >7


Ну ты задачки себе задаёшь под вечер
Для каких целей тебе это надо? Шпиона пишешь?

В общем случае скорее всего решить твою задачу невозможно.
Re[2]: Узнать какая вкладка активна в браузере
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 18.06.10 13:30
Оценка: 4 (1)
Здравствуйте, BlackEric, Вы писали:

BE>Здравствуйте, BlackEric, Вы писали:


BE>>А можно узнать какая вкладка активна в браузере? И как отследить переключение?


BE>>Интересуют Opera, Firefox, Chrome и IE >7


BE>Или открытый URL получить


Попробуй оттолкнутся вот от такого кода....


Uses DDEMan,....

function Get_URL(Servicio: string): String;
var
  Cliente_DDE: TDDEClientConv;
  temp:PChar;
begin
   Result := '';
   Cliente_DDE:= TDDEClientConv.Create( nil );
    with Cliente_DDE do
       begin
          SetLink( Servicio,'WWW_GetWindowInfo');
          temp := RequestData('0xFFFFFFFF');
          Result := StrPas(temp);
          StrDispose(temp);  
          CloseLink;
       end;
     Cliente_DDE.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage(Get_URL('IExplore')); // для IE
end;
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[2]: Узнать какая вкладка активна в браузере
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 18.06.10 13:40
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, BlackEric, Вы писали:


BE>>А можно узнать какая вкладка активна в браузере? И как отследить переключение?


BE>>Интересуют Opera, Firefox, Chrome и IE >7


D>Ну ты задачки себе задаёшь под вечер

D>Для каких целей тебе это надо? Шпиона пишешь?

D>В общем случае скорее всего решить твою задачу невозможно.


На самом деле все не так страшно, как кажется. Вот еще один вариант получения урлов.


Uses MSHTML, SHDocVw ....

procedure TForm1.Button3Click(Sender: TObject);
var
 ShellWindow: IShellWindows;
 WB: IWebbrowser2;
 spDisp: IDispatch;
 IDoc1: IHTMLDocument2;
 k: Integer;
 S:WideString;
begin
 S:='';
 ShellWindow := CoShellWindows.Create;
 for k := 0 to ShellWindow.Count do
 begin
   spDisp := ShellWindow.Item(k);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(iWebBrowser2, WB);
   if WB <> nil then
   begin
     WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
     if iDoc1<>nil then S:=S+iDoc1.url;
   end;
 end;
 ShowMessage(S);
end;
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re: Узнать какая вкладка активна в браузере
От: okman Беларусь https://searchinform.ru/
Дата: 18.06.10 13:59
Оценка:
Здравствуйте, BlackEric.
Вы писали:

BE>А можно узнать какая вкладка активна в браузере? И как отследить переключение?

BE>Интересуют Opera, Firefox, Chrome и IE >7

Для IE точно можно, но для этого нужно написать свое расширение к этому браузеру (кнопка,
тулбар или плагин типа BHO) — каждый экземпляр IE-расширения будет при инициализации
получать указатели на определенные структуры данных, через которые сможет взаимодействовать
с браузером.

Переключение вкладок, например, можно отследить через DWebBrowserEvents2::WindowStateChanged(),
подписавшись на эти события с помощью ConnectionPoints и указателей на базовые сервисы,
предоставляемые браузером.
Тема эта непростая — нужно хорошо разбираться в COM и архитектуре Internet Explorer-а.
Re[2]: Узнать какая вкладка активна в браузере
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 18.06.10 14:03
Оценка:
Здравствуйте, okman, Вы писали:

O>Для IE точно можно, но для этого нужно написать свое расширение к этому браузеру (кнопка,

O>тулбар или плагин типа BHO) — каждый экземпляр IE-расширения будет при инициализации
O>получать указатели на определенные структуры данных, через которые сможет взаимодействовать
O>с браузером.

Не обязательно.

O>Переключение вкладок, например, можно отследить через DWebBrowserEvents2::WindowStateChanged(),

O>подписавшись на эти события с помощью ConnectionPoints и указателей на базовые сервисы,
O>предоставляемые браузером.
O>Тема эта непростая — нужно хорошо разбираться в COM и архитектуре Internet Explorer-а.

Еще как один из вариантов — искать адресную строку через проход по дочерним окнам IE (предварительно окно IE тоже нужно найти) и посылать этой строке WM_GETTEXT. Но сдается мне, что это несколько не то, что нужно
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[3]: Узнать какая вкладка активна в браузере
От: Dimonka Верблюд  
Дата: 18.06.10 14:17
Оценка:
Здравствуйте, DarkMaster, Вы писали:

BE>>>А можно узнать какая вкладка активна в браузере? И как отследить переключение?


BE>>>Интересуют Opera, Firefox, Chrome и IE >7


D>>Ну ты задачки себе задаёшь под вечер

D>>Для каких целей тебе это надо? Шпиона пишешь?

D>>В общем случае скорее всего решить твою задачу невозможно.


DM>На самом деле все не так страшно, как кажется. Вот еще один вариант получения урлов.


Осталось только добавить кода ещё для 3-х браузеров..
Re[2]: Узнать какая вкладка активна в браузере
От: BlackEric http://black-eric.lj.ru
Дата: 18.06.10 19:47
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, BlackEric, Вы писали:


BE>>А можно узнать какая вкладка активна в браузере? И как отследить переключение?


BE>>Интересуют Opera, Firefox, Chrome и IE >7


D>Ну ты задачки себе задаёшь под вечер

D>Для каких целей тебе это надо? Шпиона пишешь?

D>В общем случае скорее всего решить твою задачу невозможно.


Не не шпиона.
Нужна тулза которая будет орать в стиле: "А теперь закрываем lib.ru и работаем."

Всем спасибо за предложения, будем пробовать
https://github.com/BlackEric001
Re[3]: Узнать какая вкладка активна в браузере
От: wellwell Австралия https://www.softperfect.com
Дата: 19.06.10 07:16
Оценка:
"BlackEric" <51397@users.rsdn.ru> wrote in message news:3849090@news.rsdn.ru...
> Не не шпиона.
> Нужна тулза которая будет орать в стиле: "А теперь закрываем lib.ru и работаем."
> Всем спасибо за предложения, будем пробовать

Это делается не на клиенте, а нежелательные ресурсы просто банятся на прокси сервере.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Узнать какая вкладка активна в браузере
От: BlackEric http://black-eric.lj.ru
Дата: 19.06.10 18:53
Оценка:
Здравствуйте, wellwell, Вы писали:

W>"BlackEric" <51397@users.rsdn.ru> wrote in message news:3849090@news.rsdn.ru...

>> Не не шпиона.
>> Нужна тулза которая будет орать в стиле: "А теперь закрываем lib.ru и работаем."
>> Всем спасибо за предложения, будем пробовать

W>Это делается не на клиенте, а нежелательные ресурсы просто банятся на прокси сервере.


В офисе — да.
Дома — нет.
Да и игрушки я дома не забаню.
https://github.com/BlackEric001
Re: Получаем Url из Google Chrome
От: BlackEric http://black-eric.lj.ru
Дата: 16.04.11 19:16
Оценка:
Поскольку Google Chrome, в отличие от Firefox, Opera и IE не поддерживает DDE, то url из активных вкладок окон для него необходимо получать через WinAPI выдирая текст из окна.

Общая идея такова:
1. Находим все окна с классом Chrome_WidgetWin_0
2. Ищем для них дочернее окно с классом Chrome_AutocompleteEditView
3. Посылая ему WM_GETTEXT получаем Url

Для выяснения структуры окон Chrome, я использовал Spy++.

В коде:


function EnumMainWindowProc(Handle: HWnd; LParam: LParam): boolean; stdcall;
var
  lpClassName: PChar;
  intList: TList<HWND>;
begin
  intList := TList<HWND>(LParam);
  GetMem(lpClassName, 255);
  try
    FillChar(lpClassName^, 255, 0);
    if (GetClassName(Handle, lpClassName, 255) > 0)and
      (lpClassName = 'Chrome_WidgetWin_0') then
        intList.Add(Handle);
  finally
    FreeMem(lpClassName);
  end;
  Result := true;
end;

procedure TForm1.GETURL_Chrome;
const
  TEXT_LENGTH = 1024;
var
  list: TList<HWND>;
  handle, hWndChromeChild: HWND;
  Buffer: string;
begin
  list := TList<HWND>.Create;
  try
   if EnumWindows(@EnumMainWindowProc, LParam(list)) then
     for handle in list do
       Memo1.Lines.Add(IntToStr(handle));

     Memo1.Lines.Add('');
     Memo1.Lines.Add('Urls');
     Memo1.Lines.Add('');

     for handle in List do
     begin
       hWndChromeChild := FindWindowEx(Handle, 0,
        PChar('Chrome_AutocompleteEditView'), nil);

        if hWndChromeChild <> 0 then
        begin
          SetLength(Buffer, TEXT_LENGTH);
          SendMessage(hWndChromeChild, WM_GETTEXT, TEXT_LENGTH, integer(@Buffer[1]));
          Memo1.Lines.Add(Buffer);
        end;
     end;

  finally
    list.Destroy;
    list := nil;
  end;

end;
https://github.com/BlackEric001
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.