setwindowlongptr (user32)
Last changed: -202.74.138.1

.
Summary
The SetWindowLongPtr API. Use this one instead of SetWindowLong to assure 64 bit compatibility.

C# Signature:

For Windows 2000 and later:

[DllImport("user32.dll")]
private static extern IntPtr SetWindowLongPtr(HandleRef hWnd, int nIndex, IntPtr dwNewLong);

To support legacy OSes (Windows 9x, NT4): (note that these OSes are no longer supported by .NET 3.0 and later)

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

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

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

VB Signature:

For Windows 2000 and later:

  <System.Runtime.InteropServices.DllImport("user32.dll")> _
  Private Shared Function SetWindowLongPtr(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As IntPtr) As IntPtr
  End Function

To support legacy OSes (Windows 9x, NT4): (note that these OSes are no longer supported by .NET 3.0 and later)

  <System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="SetWindowLong")> _
  Private Shared Function SetWindowLong32(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
  End Function

  <System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="SetWindowLongPtr")> _
  Private Shared Function SetWindowLongPtr64(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As IntPtr) As IntPtr
  End Function

  Public Shared Function SetWindowLongPtr(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As IntPtr) As IntPtr
    If IntPtr.Size = 8 Then
      Return SetWindowLongPtr64(hWnd, nIndex, dwNewLong)
    Else
      Return New IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32))
    End If
  End Function

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Documentation