Get the distance between the edge of the screen and the web page

enter image description here

Ok, consider this image.

I develop an IE extension in c# and I would :
  - the distance in red, between top of screen and top of `visible webpage`
  - the distance in red between left of screen and left of `visible webpage`
  - the width/heigth of the visible webpage

Of course, given that I have the entire screen size. If I have red and black, I can calculate the green color.

What is the point?

I have thousands of screen coordinates (X, Y), I have to calculate the coordinates relative to the web page.

Example : 

Considering
  Screen size : 1200 * 800
  Webpage size : 400*300
  Red distance between left screen border and left webpage border  : 200
  Red distance between top screen border and top webpage border  : 300

So my coordinates screen => relative webpage becomes :
  ( 100, 100 ) => OUTSIDE WEBPAGE( ignored )
  ( 1100, 650 ) => OUTSIDE WEBPAGE ( ignored )
  ( 200, 300 ) => ( 0,0 )
  ( 250, 400 ) => ( 50, 100 )

Actually I have this code, thisinherited from AddinExpress.IE.ADXIEModule, thetoolbarObj is the toolbar that I added to InternetExplorer. Therefore, I can use pointToScreen on it, and I'm not far from what I need, but the left corner of the toolbar is not what I need, I need the left user of the web page.

public void getUtilsDimension()
{
    Rectangle resolution = Screen.PrimaryScreen.Bounds;
    Int32 screenWidth = resolution.Width;
    Int32 screenHeight = resolution.Height;

    AddinExpress.IE.ADXIEToolBarItem toolbarItem = this.ToolBars[0];
    AddinExpress.IE.ADXIEToolbar toolbarObj = toolbarItem.ToolBarObj;
    Point leftCornerWebPage = toolbarObj.PointToScreen(new Point(0, 0));
    Int32 toolbarHeight = toolbarObj.Height;
    Int32 toolbarWidth = toolbarObj.Width;

    Debug.WriteLine("Largeur écran : " + screenWidth);
    Debug.WriteLine("Hauteur écran : " + screenHeight);
    Debug.WriteLine("LeftCornerX : " + leftCornerWebPage.X);
    Debug.WriteLine("LeftCornerY : " + leftCornerWebPage.Y);
    Debug.WriteLine("toolbarHeight : " + toolbarHeight);
    Debug.WriteLine("toolbarWidth : " + toolbarWidth);

}

, , 1600 * 900, pointToScreen (484,158). , -. , $(window) JQuery, , #.

HTLMDocument (typeof mshtml.HTMLDocument) this.HTMLDocument, , pointToScreen HTMLDocument.

enter image description here

: , , , IE

08/12

- ( ) - 2

var heightVisibleWebPage = HTMLDocument.documentElement.offsetHeight;
var widthVisibleWebPage = HTMLDocument.documentElement.offsetWidth;

. . Internet, /// .

08/12 HTMLDocument

HTMLDocument - AddinExpress, System.Windows.Forms.HtmlDocument

public mshtml.HTMLDocument HTMLDocument
{
    get
    {
        return (this.HTMLDocumentObj as mshtml.HTMLDocument);
    }

}

HTMLDocument.parentWindows - IHTMLWindow2

HTMLDocumentObj

public class ADXIEModule : Component, IRemoteModule2, IRemoteModule, IObjectWithSite, IWin32Window
{
     ...
    //
    // Résumé :
    //     Gets the automation object (a COM object) of the active document, if any.
    //
    // Notes :
    //     When the active document is an HTML page, this property provides access to
    //     the contents of the HTML Document Object Model (DOM). Specifically, it returns
    //     an HTMLDocument object reference. The HTMLDocument object is functionally
    //     equivalent to the HTML document object used in HTML page script. It supports
    //     all the properties and methods necessary to access the entire contents of
    //     the active HTML document.
    //     The HTMLDocument object can be used through the IHTMLDocument interface,
    //     the IHTMLDocument2 interface, and the IHTMLDocument3 interface.
    //     When other document types are active, such as a Microsoft Word document,
    //     this property returns the document automation object of that document. For
    //     Word documents, this is the Document object.
    [Browsable(false)]
    public object HTMLDocumentObj { get; }

    ...

}

, -1 , ;)

+4
2

:

  • Internet Explorer EnumWindows() api. IEFrame

  • EnumChildWindows() api. Internet Explorer_Server

  • x, y GetWindowRect() api

:

[DllImport("user32.dll")]
public static extern int EnumWindows(EnumWindowsCallback lpEnumFunc, int lParam);

[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsCallback lpEnumFunc, int lParam);

public delegate bool EnumWindowsCallback(IntPtr hwnd, int lParam);

[DllImport("user32.dll")]
public static extern void GetClassName(IntPtr hwnd, StringBuilder s, int nMaxCount);

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public int Left;        // x position of upper-left corner
    public int Top;         // y position of upper-left corner
    public int Right;       // x position of lower-right corner
    public int Bottom;      // y position of lower-right corner
}

[DllImport("user32.dll")]
static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);

private IntPtr ieHandle, ieChildHandle;

private void GetWindows()
{
    EnumWindows(Callback, 0);
}

private bool Callback(IntPtr hwnd, int lParam)
{
    StringBuilder className = new StringBuilder(256);

    GetClassName(hwnd, className, className.Capacity);

    if (className.ToString().Equals("IEFrame"))
    {
        ieHandle = hwnd;

        return false;
    }

    return true; //continue enumeration
}

private void GetChildWindows()
{
    if (ieHandle != IntPtr.Zero)
    {
        EnumChildWindows(ieHandle, CallbackChild, 0);
    }
}

private bool CallbackChild(IntPtr hwnd, int lParam)
{
    StringBuilder className = new StringBuilder(256);

    GetClassName(hwnd, className, className.Capacity);

    if (className.ToString().Equals("Internet Explorer_Server"))
    {
        ieChildHandle = hwnd;

        return false;
    }

    return true; //continue enumeration
}

:

GetWindows();
GetChildWindows();

if (ieChildHandle != IntPtr.Zero)
{
    RECT rect;

    if (GetWindowRect(ieChildHandle, out rect))
    {
        //rect.Left, rect.Top
    }

}

ieChildHandle = IntPtr.Zero;
ieHandle = IntPtr.Zero;

IE 6, 9 11

+2

:

foreach (InternetExplorer ie in new ShellWindows())
{
    // Find
    // Current
    // Tab
    //currentTab.left // left edge in pixels
}

, ".parent", , .

http://msdn.microsoft.com/en-us/library/windows/desktop/aa752084(v=vs.85).aspx#properties

0

All Articles