Desktop Functions:

   Smart Device Functions:

Show Recent Changes
Subscribe (RSS)
Misc. Pages
Helpful Tools
Suggested Reading
Website TODO List
Download Visual Studio Add-In

TileWindows (user32)

C# Signature:

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

static extern int TileWindows(IntPtr hwndParent, int wHow, IntPtr lpRect, int cKids, IntPtr lpKids);

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

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;


User-Defined Types:




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
                                              End If
                                              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!

TileWindows on MSDN

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

Access directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version