[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).
Please add some!
Please add some!
Do you know one? Please contribute it!