GetWindowInfo (user32)
Last changed: -108.219.86.91

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern bool GetWindowInfo(IntPtr hwnd, ref WINDOWINFO pwi);

VB Signature:

Public Declare Auto Function GetWindowInfo Lib "user32" _
(ByVal hwnd As IntPtr, ByRef pwi As WINDOWINFO) As Boolean

VB.Net Signature:

<DllImport("User32.dll")> _
Public Function GetWindowInfo(ByVal hwnd As IntPtr, ByRef pwi As WINDOWINFO) As Boolean
End Function

User-Defined Types:

None.

Notes:

You must assign the cbSize parameter prior to calling GetWindowInfo(). For example:

In C#

    WINDOWINFO info = new WINDOWINFO();
    info.cbSize = (uint)Marshal.SizeOf(info);
    GetWindowInfo(Handle, ref info);

In VB

    Dim instance As Process
    Dim info As New WINDOWINFO
    info.cbSize = Convert.ToUInt32(Marshal.SizeOf(info))

To get a WINDOWINFO see http://pinvoke.net/default.aspx/Structures.WINDOWINFO

* WARNING * The size of this (http://pinvoke.net/default.aspx/Structures.WINDOWINFO) structure is 96 bytes, while what the function expects is 60 bytes. The structure format is wrong.

The correct structure format is as follows:

    [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
    public struct tagWINDOWINFO
    {
        /// DWORD->unsigned int
        public uint cbSize;

        /// RECT->tagRECT
        public tagRECT rcWindow;

        /// RECT->tagRECT
        public tagRECT rcClient;

        /// DWORD->unsigned int
        public uint dwStyle;

        /// DWORD->unsigned int
        public uint dwExStyle;

        /// DWORD->unsigned int
        public uint dwWindowStatus;

        /// UINT->unsigned int
        public uint cxWindowBorders;

        /// UINT->unsigned int
        public uint cyWindowBorders;

        /// ATOM->WORD->unsigned short
        public ushort atomWindowType;

        /// WORD->unsigned short
        public ushort wCreatorVersion;
    }

with tagRECT being:

    [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
    public struct tagRECT
    {

        /// LONG->int
        public int left;

        /// LONG->int
        public int top;

        /// LONG->int
        public int right;

        /// LONG->int
        public int bottom;
    }

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation