GetWindowLongPtr (user32)
Last changed: -202.74.138.1

.
Summary

C# Signature:

// This static method is required because legacy OSes do not support
// GetWindowLongPtr
public static IntPtr GetWindowLongPtr(HandleRef hWnd, int nIndex)
{
     if (IntPtr.Size == 8)
     return GetWindowLongPtr64(hWnd, nIndex);
     else
     return new IntPtr(GetWindowLong32(hWnd, nIndex));
}

[DllImport("user32.dll", EntryPoint="GetWindowLong")]
private static extern int GetWindowLong32(HandleRef hWnd, int nIndex);

[DllImport("user32.dll", EntryPoint="GetWindowLongPtr")]
private static extern IntPtr GetWindowLongPtr64(HandleRef hWnd, int nIndex);

VB .NET Signature:

' This static method is required because legacy OSes do not support GetWindowLongPtr
Public Shared Function GetWindowLongPtr(ByVal hWnd As HandleRef, ByVal nIndex As Integer) As IntPtr
    If IntPtr.Size = 8 Then
        Return GetWindowLongPtr64(hWnd, nIndex)
    Else
        Return New IntPtr(GetWindowLong32(hWnd, nIndex))
    End If
End Function
<DllImport("user32.dll", EntryPoint:="GetWindowLong")> _
Private Shared Function GetWindowLong32(ByVal hWnd As HandleRef, ByVal nIndex As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="GetWindowLongPtr")> _
Private Shared Function GetWindowLongPtr64(ByVal hWnd As HandleRef, ByVal nIndex As Integer) As IntPtr
End Function

User-Defined Types:

To access the values referred to on MSDN declare the following enumeration.

C# enumeration:

    public enum GWL
    {
        GWL_WNDPROC =    (-4),
        GWL_HINSTANCE =  (-6),
        GWL_HWNDPARENT = (-8),
        GWL_STYLE =      (-16),
        GWL_EXSTYLE =    (-20),
        GWL_USERDATA =   (-21),
        GWL_ID =         (-12)
    }

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

C# Sample:

    //Returns the ID for a window given the handle for that window as returned by EnumChildWindows.
    //note that for this to work you will need to change the signature from 'int nIndex' to 'GWL nIndex' in all three places
    private string GetID(IntPtr winhandle)
    {
        IntPtr result;
        result = GetWindowLongPtr(winhandle, GWL.GWL_ID);
        return result.ToString();
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation