tilewindows (user32)
Last changed: -5.103.153.81

.
Summary

C# Signature:

The first version is for use if you want to pass null (IntPtr.Zero) to both lpRect and lpKids.

[DllImport("user32.dll")]
static extern int TileWindows(IntPtr hwndParent, int wHow, IntPtr lpRect, int cKids, IntPtr lpKids);

This one is for non-null lpKids, but null lpRect.

[DllImport("user32.dll")]
static extern int TileWindows(IntPtr hwndParent, int wHow, IntPtr lpRect, int cKids, [MarshalAs(UnmanagedType.LPArray)]IntPtr[] lpKids);

You would need a different version again to pass in a real RECT to lpRect, but I've not tried that one myself.

Here are the constants:

const int MDITILE_VERTICAL = 0;

const int MDITILE_HORIZONTAL = 1;

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Sample for VB.NET

Enables you to define a RECT and which windows to 'attack'!

' **************************************

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _

    Private Shared Function EnumWindows(

ByVal lpEnumFunc As EnumWindowsProc, _

ByVal lParam As IntPtr) As Boolean

    End Function

<System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint:="TileWindows")> _

    Private Shared Function TileWindows(ByVal hwndParent As System.IntPtr, ByVal wHow As UInteger, ByVal lpRect As RECT, ByVal cKids As UInteger, ByVal lpKids() As System.IntPtr) As UShort
    End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _

    Private Shared Function GetWindowText(hWnd As IntPtr, lpString As StringBuilder, nMaxCount As Integer) As Integer
    End Function

Private Shared Function GetWindowsTitle(hwnd As IntPtr) As String

        Dim sb As New StringBuilder(1024)
        GetWindowText(hwnd, sb, sb.Capacity)
        Return sb.ToString
    End Function

    Private Sub TileClassMatch(className As String, inRect As RECT, _
             partialMatch As Boolean)

        Dim hwndLst As New List(Of IntPtr)
        'Define the 'ad-hoc' routine as needed, e.g.:
        Dim CB As New EnumWindowsProc(Function(hwnd As IntPtr, lParam As IntPtr)
                                          Dim cln As String = GetWindowsTitle(hwnd)
                                          If partialMatch Then
                                              If className.ToLower.Contains(cln.ToLower) Then
                                                  hwndLst.Add(hwnd)
                                              End If
                                          Else
                                              If className = cln Then hwndLst.Add(hwnd)
                                          End If

                                          Return True
                                      End Function)
        'Call it...
        EnumWindows(CB, IntPtr.Zero)

        If hwndLst.Count > 0 Then
            Dim successCount As UShort = _
            TileWindows(IntPtr.Zero, MDI_TILE.SKIPDISABLED, _
             inRect, CUInt(hwndLst.Count), hwndLst.ToArray)
            MessageBox.Show(String.Concat(successCount.ToString, " windows tiled in ", vbCrLf, _
             "rectangle ", inRect.Left.ToString, ", ", inRect.Top.ToString, ", ", inRect.Right.ToString, _
             ", ", inRect.Bottom.ToString), "Tiling...", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

' Jens M., 12/2/2012

' NB! Use 'CascadeWindows' as above.

' **************************************

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
TileWindows on MSDN