SetClassLong (user32)
Last changed: -202.74.138.1

.
Summary

C# Signature:

public static IntPtr SetClassLong(HandleRef hWnd, int nIndex, IntPtr dwNewLong)
{
    if (IntPtr.Size > 4)
        return SetClassLongPtr64(hWnd, nIndex, dwNewLong);
    else
        return new IntPtr(SetClassLongPtr32(hWnd, nIndex, unchecked((uint)dwNewLong.ToInt32())));
}

[DllImport("user32.dll", EntryPoint="SetClassLong")]
public static extern uint SetClassLongPtr32(HandleRef hWnd, int nIndex, uint dwNewLong);

[DllImport("user32.dll", EntryPoint="SetClassLongPtr")]
public static extern IntPtr SetClassLongPtr64(HandleRef hWnd, int nIndex, IntPtr dwNewLong);

VB.NET Signature:

<DllImport("user32.dll", EntryPoint:="SetClassLongPtrA", SetLastError:=True, CharSet:=CharSet.Ansi)> _
Public Function SetClassLongPtr(hWnd as IntPtr, <MarshalAs(UnmanagedType.I4)>nIndex as ClassLongFlags, newLong as Integer) as Integer

End Function

VB Signature:

Public Declare Function SetClassLongPtr Lib "user32" Alias "SetClassLongPtrA" _
        (ByVal hWnd As Long, _
         ByVal nIndex As ClassLongFlags, _
         ByVal dwNewLong As Long) As Long

User-Defined Types:

ClassLongFlags

Notes:

SetClassLongPtr is 64-bit safe, SetClassLong is not.

Because SetClassLongPtr is not available on older 32-bit operating systems, a special wrapper function is required. The MSDN documentation specifies that SetClassLongPtr is supported on older 32-bit operating systems such as Windows 95. However, the Win32 API actually uses a macro to change SetClassLongPtr to SetClassLong on these older systems.

Testing the size of the IntPtr is the easiest way to determine if the platform is 64-bit.

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation