SendMessage (user32)
Last changed: -117.34.142.236

.
Summary

C# Signature:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, StringBuilder lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, ref IntPtr lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);

VB Signature:

<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As StringBuilder) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> ByVal lParam As String) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.LPWStr)> ByVal lParam As String) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByRef lParam As IntPtr) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As IntPtr
End Function

Notes:

None.

Tips & Tricks:

Used when propagating environment variables, for instance, updating the Path, without requiring a reboot: see also http://support.microsoft.com/kb/104011

Please add some!

Sample Code:

C# Samples

//Set a note to a CommandLink
SendMessage(myCommandLink, BCM_SETNOTE, 0, "My CommandLink Note");

//Retrieve a text using WM_GETTEXT
int length = SendMessage(myHwndHandle, WM_GETTEXTLENGTH, 0, 0).ToInt32();
StringBuilder builder = new StringBuilder(length);
SendMessage(myHwndHandle, WM_GETTEXT, length, builder);

VB.NET Samples

Function GetWindowTitle(hWnd As IntPtr) As String

    Dim length As Integer = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0)
    Dim title As New String(New Char, length)
    SendMessage(hWnd, WM_GETTEXT, length+1, title)
    Return title

End Function

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
SendMessage on MSDN