Как получить / установить расположение полосы прокрутки браузера (IE / Firefox / ...)? - PullRequest
2 голосов
/ 08 апреля 2009

Есть ли способ получить / установить расположение полосы прокрутки в Internet Explorer / Firefox? Я не пытаюсь сделать это из кода HTML / ASP / Javascript, но из приложения вне браузера (например, с использованием WinAPI) и без использования BHO.

По результатам поиска, который я сделал сейчас, это кажется невозможным, поэтому я в качестве последней попытки отбрасываю здесь вопрос.

1 Ответ

2 голосов
/ 05 мая 2009

Для Internet Explorer вы можете использовать COM-автоматизацию для перечисления всех активных окон / вкладок Internet Explorer, а затем получить доступ к дереву DOM документа, отображаемого в окне / вкладке, для доступа и чтения положения прокрутки.

В следующем примере кода Delphi используется в качестве языка программирования. Механизм будет аналогичным в C ++, VB или C #

var
   ShWindows:  ShellWindows;
   InetExplorer: InternetExplorer;
   Count: Integer;
   I: Integer;
   HTMLDocument: IHTMLDocument2;
   Elem: IHTMLElement2;
   ScrollPosY: Integer;
begin
   // Create ShellWindows Object
   SHWindows:= CoShellWindows.Create;

   // Number of explorer windows/tabs (win explorer and ie)
   Count:= ShWindows.Count;
   ShowMessage(Format('There are %d explorer windows open.', [Count]));

   // For all windows/tabs
   for I:= 0 to (Count - 1) do
   begin
     // Get as InetExplorer interface
     InetExplorer:= SHWindows.item(I) as InternetExplorer;

     // Check to see if this explorer window contains a web document
     if Supports(InetExplorer.Document, IHTMLDocument2, HTMLDocument) then
     begin
       // Get body Element
       Elem:= HTMLDocument.body as IHTMLElement2;
       // Read vertical scroll position
       ScrollPosY:= Elem.scrollTop;

       // If this is 0 so far, maybe there is a scroll position in root element
       if ScrollPosY = 0 then
       begin
         Elem:= HTMLDocument.body.parentElement as IHTMLElement2;
         ScrollPosY:= Elem.scrollTop;
       end;

       // Display
       ShowMessage(IntToStr(Elem.scrollTop));
     end;
   end;
end;

Для документации, начните здесь: http://msdn.microsoft.com/en-us/library/bb773974(VS.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...