[DllImport("user32.dll")]
static extern bool GetWindowInfo(IntPtr hwnd, ref WINDOWINFO pwi);
Public Declare Auto Function GetWindowInfo Lib "user32" _
(ByVal hwnd As IntPtr, ByRef pwi As WINDOWINFO) As Boolean
<DllImport("User32.dll")> _
Public Function GetWindowInfo(ByVal hwnd As IntPtr, ByRef pwi As WINDOWINFO) As Boolean
End Function
None.
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;
}
* UPDATE * The proposed "fixed" structure above is the same. The difference is in the fact that the default packing size in managed code is 8 bytes, while the default packing in unmanaged code is 4 bytes. So, when marshalled to the API, the struct size is 60.
By the way, the StructLayoutAttribute is optional, because the C# compiler applies by default the Sequential layout kind on structures (but not on classes).
Note that the members of the RECT structure should be int, not long. In some other API functions they are long, so this can be confusing.
Please add some!
Do you know one? Please contribute it!