Sends the specified message to a window or windows.
It uses P/Invoke that allows you to access structs, callbacks, and functions in unmanaged libraries from your managed code.
The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message.
SendMessage (int hwnd, int wMsg, int wParam, int lParam);
Type: HWND
A handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST ((HWND)0xffff), the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.
Type: UINT
The message to be sent. For lists of the system-provided messages, see System-Defined Messages.
Type: WPARAM
Additional message-specific information.
Type: LPARAM
Additional message-specific information.
Here is the implementation of it using C# with PInvoke
//Send Message API Class
//send Message Win32 Ap interop
using System.Runtime.InteropServices;
namespace KillerCodes.win32.API
{
public static class WIN32_API
{
[DllImport("user32.dll", EntryPoint="SendMessageW")]
private static extern int SendMessage (int hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll", EntryPoint = "SendMessageW")]
private static extern int SendMessageFL(int hwnd, int wMsg, int wParam, string lParam);
[DllImport("user32.dll", EntryPoint = "SendMessageW")]
private static extern int SendMessageSD(int hwnd, int wMsg, string wParam, int lParam);
public enum WM : int
{
WM_ACTIVATE = 0x6,
WM_ACTIVATEAPP = 0x1C,
WM_ADSPROP_NOTIFY_APPLY = (WM_USER + 1104),
WM_USER = 0x400,
WM_ADSPROP_NOTIFY_CHANGE = (WM_USER + 1103),
WM_ADSPROP_NOTIFY_EXIT = (WM_USER + 1107),
WM_ADSPROP_NOTIFY_FOREGROUND = (WM_USER + 1106),
WM_ADSPROP_NOTIFY_PAGEHWND = (WM_USER + 1102),
WM_ADSPROP_NOTIFY_PAGEINIT = (WM_USER + 1101),
WM_ADSPROP_NOTIFY_SETFOCUS = (WM_USER + 1105),
WM_ADSPROP_NOTIFY_SHOW_ERROR_DIALOG = (WM_USER + 1111),
WM_AFXFIRST = 0x360,
WM_AFXLAST = 0x37F,
WM_APP = 0x8000,
WM_APPCOMMAND = 0x319,
WM_ASKCBFORMATNAME = 0x30C,
WM_CANCELJOURNAL = 0x4B,
WM_CANCELMODE = 0x1F,
WM_CAP_ABORT = (WM_CAP_START+ 69),
WM_CAP_START = WM_USER,
WM_CAP_DLG_VIDEOCOMPRESSION = (WM_CAP_START+ 46),
WM_CAP_DLG_VIDEODISPLAY = (WM_CAP_START+ 43),
WM_CAP_DLG_VIDEOFORMAT = (WM_CAP_START+ 41),
WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START+ 42),
WM_CAP_DRIVER_CONNECT = (WM_CAP_START+ 10),
WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START+ 11),
WM_CAP_DRIVER_GET_CAPS = (WM_CAP_START+ 14),
WM_CAP_DRIVER_GET_NAMEA = (WM_CAP_START+ 12),
WM_CAP_DRIVER_GET_NAMEW = (WM_CAP_UNICODE_START+ 12),
WM_CAP_UNICODE_START = WM_USER+100,
WM_CAP_DRIVER_GET_VERSIONA = (WM_CAP_START+ 13),
WM_CAP_DRIVER_GET_VERSIONW = (WM_CAP_UNICODE_START+ 13),
WM_CAP_EDIT_COPY = (WM_CAP_START+ 30),
WM_CAP_END = WM_CAP_UNICODE_END,
WM_CAP_UNICODE_END = WM_CAP_PAL_SAVEW,
WM_CAP_FILE_ALLOCATE = (WM_CAP_START+ 22),
WM_CAP_FILE_GET_CAPTURE_FILEA = (WM_CAP_START+ 21),
WM_CAP_FILE_GET_CAPTURE_FILEW = (WM_CAP_UNICODE_START+ 21),
WM_CAP_FILE_SAVEASA = (WM_CAP_START+ 23),
WM_CAP_FILE_SAVEASW = (WM_CAP_UNICODE_START+ 23),
WM_CAP_FILE_SAVEDIBA = (WM_CAP_START+ 25),
WM_CAP_FILE_SAVEDIBW = (WM_CAP_UNICODE_START+ 25),
WM_CAP_FILE_SET_CAPTURE_FILEA = (WM_CAP_START+ 20),
WM_CAP_FILE_SET_CAPTURE_FILEW = (WM_CAP_UNICODE_START+ 20),
WM_CAP_FILE_SET_INFOCHUNK = (WM_CAP_START+ 24),
WM_CAP_GET_AUDIOFORMAT = (WM_CAP_START+ 36),
WM_CAP_GET_CAPSTREAMPTR = (WM_CAP_START+ 1),
WM_CAP_GET_MCI_DEVICEA = (WM_CAP_START+ 67),
WM_CAP_GET_MCI_DEVICEW = (WM_CAP_UNICODE_START+ 67),
WM_CAP_GET_SEQUENCE_SETUP = (WM_CAP_START+ 65),
WM_CAP_GET_STATUS = (WM_CAP_START+ 54),
WM_CAP_GET_USER_DATA = (WM_CAP_START+ 8),
WM_CAP_GET_VIDEOFORMAT = (WM_CAP_START+ 44),
WM_CAP_GRAB_FRAME = (WM_CAP_START+ 60),
WM_CAP_GRAB_FRAME_NOSTOP = (WM_CAP_START+ 61),
WM_CAP_PAL_AUTOCREATE = (WM_CAP_START+ 83),
WM_CAP_PAL_MANUALCREATE = (WM_CAP_START+ 84),
WM_CAP_PAL_OPENA = (WM_CAP_START+ 80),
WM_CAP_PAL_OPENW = (WM_CAP_UNICODE_START+ 80),
WM_CAP_PAL_PASTE = (WM_CAP_START+ 82),
WM_CAP_PAL_SAVEA = (WM_CAP_START+ 81),
WM_CAP_PAL_SAVEW = (WM_CAP_UNICODE_START+ 81),
WM_CAP_SEQUENCE = (WM_CAP_START+ 62),
WM_CAP_SEQUENCE_NOFILE = (WM_CAP_START+ 63),
WM_CAP_SET_AUDIOFORMAT = (WM_CAP_START+ 35),
WM_CAP_SET_CALLBACK_CAPCONTROL = (WM_CAP_START+ 85),
WM_CAP_SET_CALLBACK_ERRORA = (WM_CAP_START+ 2),
WM_CAP_SET_CALLBACK_ERRORW = (WM_CAP_UNICODE_START+ 2),
WM_CAP_SET_CALLBACK_FRAME = (WM_CAP_START+ 5),
WM_CAP_SET_CALLBACK_STATUSA = (WM_CAP_START+ 3),
WM_CAP_SET_CALLBACK_STATUSW = (WM_CAP_UNICODE_START+ 3),
WM_CAP_SET_CALLBACK_VIDEOSTREAM = (WM_CAP_START+ 6),
WM_CAP_SET_CALLBACK_WAVESTREAM = (WM_CAP_START+ 7),
WM_CAP_SET_CALLBACK_YIELD = (WM_CAP_START+ 4),
WM_CAP_SET_MCI_DEVICEA = (WM_CAP_START+ 66),
WM_CAP_SET_MCI_DEVICEW = (WM_CAP_UNICODE_START+ 66),
WM_CAP_SET_OVERLAY = (WM_CAP_START+ 51),
WM_CAP_SET_PREVIEW = (WM_CAP_START+ 50),
WM_CAP_SET_PREVIEWRATE = (WM_CAP_START+ 52),
WM_CAP_SET_SCALE = (WM_CAP_START+ 53),
WM_CAP_SET_SCROLL = (WM_CAP_START+ 55),
WM_CAP_SET_SEQUENCE_SETUP = (WM_CAP_START+ 64),
WM_CAP_SET_USER_DATA = (WM_CAP_START+ 9),
WM_CAP_SET_VIDEOFORMAT = (WM_CAP_START+ 45),
WM_CAP_SINGLE_FRAME = (WM_CAP_START+ 72),
WM_CAP_SINGLE_FRAME_CLOSE = (WM_CAP_START+ 71),
WM_CAP_SINGLE_FRAME_OPEN = (WM_CAP_START+ 70),
WM_CAP_STOP = (WM_CAP_START+ 68),
WM_CAPTURECHANGED = 0x215,
WM_CHANGECBCHAIN = 0x30D,
WM_CHANGEUISTATE = 0x127,
WM_CHAR = 0x102,
WM_CHARTOITEM = 0x2F,
WM_CHOOSEFONT_GETLOGFONT = (WM_USER + 1),
WM_CHOOSEFONT_SETFLAGS = (WM_USER + 102),
WM_CHOOSEFONT_SETLOGFONT = (WM_USER + 101),
WM_CLEAR = 0x303,
WM_CLOSE = 0x10,
WM_COMMAND = 0x111,
WM_COMMNOTIFY = 0x44,
WM_COMPACTING = 0x41,
WM_COMPAREITEM = 0x39,
WM_CONTEXTMENU = 0x7B,
WM_CONVERTREQUEST = 0x10A,
WM_CONVERTREQUESTEX = 0x108,
WM_CONVERTRESULT = 0x10B,
WM_COPY = 0x301,
WM_COPYDATA = 0x4A,
WM_CPL_LAUNCH = (WM_USER+1000),
WM_CPL_LAUNCHED = (WM_USER+1001),
WM_CREATE = 0x1,
WM_CTLCOLOR = 0x19,
WM_CTLCOLORBTN = 0x135,
WM_CTLCOLORDLG = 0x136,
WM_CTLCOLOREDIT = 0x133,
WM_CTLCOLORLISTBOX = 0x134,
WM_CTLCOLORMSGBOX = 0x132,
WM_CTLCOLORSCROLLBAR = 0x137,
WM_CTLCOLORSTATIC = 0x138,
WM_CUT = 0x300,
WM_DDE_FIRST = 0x3E0,
WM_DDE_ACK = (WM_DDE_FIRST + 4),
WM_DDE_ADVISE = (WM_DDE_FIRST + 2),
WM_DDE_DATA = (WM_DDE_FIRST + 5),
WM_DDE_EXECUTE = (WM_DDE_FIRST + 8),
WM_DDE_INITIATE = (WM_DDE_FIRST),
WM_DDE_LAST = (WM_DDE_FIRST + 8),
WM_DDE_POKE = (WM_DDE_FIRST + 7),
WM_DDE_REQUEST = (WM_DDE_FIRST + 6),
WM_DDE_TERMINATE = (WM_DDE_FIRST + 1),
WM_DDE_UNADVISE = (WM_DDE_FIRST + 3),
WM_DEADCHAR = 0x103,
WM_DELETEITEM = 0x2D,
WM_DESTROY = 0x2,
WM_DESTROYCLIPBOARD = 0x307,
WM_DEVICECHANGE = 0x219,
WM_DEVMODECHANGE = 0x1B,
WM_DISPLAYCHANGE = 0x7E,
WM_DRAWCLIPBOARD = 0x308,
WM_DRAWITEM = 0x2B,
WM_DROPFILES = 0x233,
WM_ENABLE = 0xA,
WM_ENDSESSION = 0x16,
WM_ENTERIDLE = 0x121,
WM_ENTERMENULOOP = 0x211,
WM_ENTERSIZEMOVE = 0x231,
WM_ERASEBKGND = 0x14,
WM_EXITMENULOOP = 0x212,
WM_EXITSIZEMOVE = 0x232,
WM_FONTCHANGE = 0x1D,
WM_FORWARDMSG = 0x37F,
WM_GETDLGCODE = 0x87,
WM_GETFONT = 0x31,
WM_GETHOTKEY = 0x33,
WM_GETICON = 0x7F,
WM_GETMINMAXINFO = 0x24,
WM_GETOBJECT = 0x3D,
WM_GETTEXT = 0xD,
WM_GETTEXTLENGTH = 0xE,
WM_HANDHELDFIRST = 0x358,
WM_HANDHELDLAST = 0x35F,
WM_HELP = 0x53,
WM_HOTKEY = 0x312,
WM_HSCROLL = 0x114,
WM_HSCROLLCLIPBOARD = 0x30E,
WM_ICONERASEBKGND = 0x27,
WM_IME_CHAR = 0x286,
WM_IME_COMPOSITION = 0x10F,
WM_IME_COMPOSITIONFULL = 0x284,
WM_IME_CONTROL = 0x283,
WM_IME_ENDCOMPOSITION = 0x10E,
WM_IME_KEYDOWN = 0x290,
WM_IME_KEYLAST = 0x10F,
WM_IME_KEYUP = 0x291,
WM_IME_NOTIFY = 0x282,
WM_IME_REPORT = 0x280,
WM_IME_REQUEST = 0x288,
WM_IME_SELECT = 0x285,
WM_IME_SETCONTEXT = 0x281,
WM_IME_STARTCOMPOSITION = 0x10D,
WM_IMEKEYDOWN = 0x290,
WM_IMEKEYUP = 0x291,
WM_INITDIALOG = 0x110,
WM_INITMENU = 0x116,
WM_INITMENUPOPUP = 0x117,
WM_INPUTLANGCHANGE = 0x51,
WM_INPUTLANGCHANGEREQUEST = 0x50,
WM_INTERIM = 0x10C,
WM_KEYDOWN = 0x100,
WM_KEYFIRST = 0x100,
WM_KEYLAST = 0x108,
WM_KEYUP = 0x101,
WM_KILLFOCUS = 0x8,
WM_LBUTTONDBLCLK = 0x203,
WM_LBUTTONDOWN = 0x201,
WM_LBUTTONUP = 0x202,
WM_MBUTTONDBLCLK = 0x209,
WM_MBUTTONDOWN = 0x207,
WM_MBUTTONUP = 0x208,
WM_MDIACTIVATE = 0x222,
WM_MDICASCADE = 0x227,
WM_MDICREATE = 0x220,
WM_MDIDESTROY = 0x221,
WM_MDIGETACTIVE = 0x229,
WM_MDIICONARRANGE = 0x228,
WM_MDIMAXIMIZE = 0x225,
WM_MDINEXT = 0x224,
WM_MDIREFRESHMENU = 0x234,
WM_MDIRESTORE = 0x223,
WM_MDISETMENU = 0x230,
WM_MDITILE = 0x226,
WM_MEASUREITEM = 0x2C,
WM_MENUCHAR = 0x120,
WM_MENUCOMMAND = 0x126,
WM_MENUDRAG = 0x123,
WM_MENUGETOBJECT = 0x124,
WM_MENURBUTTONUP = 0x122,
WM_MENUSELECT = 0x11F,
WM_MOUSEACTIVATE = 0x21,
WM_MOUSEFIRST = 0x200,
WM_MOUSEHOVER = 0x2A1,
WM_MOUSELAST = 0x209,
WM_MOUSELEAVE = 0x2A3,
WM_MOUSEMOVE = 0x200,
WM_MOUSEWHEEL = 0x20A,
WM_MOVE = 0x3,
WM_MOVING = 0x216,
WM_NCACTIVATE = 0x86,
WM_NCCALCSIZE = 0x83,
WM_NCCREATE = 0x81,
WM_NCDESTROY = 0x82,
WM_NCHITTEST = 0x84,
WM_NCLBUTTONDBLCLK = 0xA3,
WM_NCLBUTTONDOWN = 0xA1,
WM_NCLBUTTONUP = 0xA2,
WM_NCMBUTTONDBLCLK = 0xA9,
WM_NCMBUTTONDOWN = 0xA7,
WM_NCMBUTTONUP = 0xA8,
WM_NCMOUSEHOVER = 0x2A0,
WM_NCMOUSELEAVE = 0x2A2,
WM_NCMOUSEMOVE = 0xA0,
WM_NCPAINT = 0x85,
WM_NCRBUTTONDBLCLK = 0xA6,
WM_NCRBUTTONDOWN = 0xA4,
WM_NCRBUTTONUP = 0xA5,
WM_NCXBUTTONDOWN = 0xAB,
WM_NCXBUTTONUP = 0xAC,
WM_NEXTDLGCTL = 0x28,
WM_NEXTMENU = 0x213,
WM_NOTIFY = 0x4E,
WM_NOTIFYFORMAT = 0x55,
WM_NULL = 0x0,
WM_OTHERWINDOWCREATED = 0x42,
WM_OTHERWINDOWDESTROYED = 0x43,
WM_PAINT = 0xF,
WM_PAINTCLIPBOARD = 0x309,
WM_PAINTICON = 0x26,
WM_PALETTECHANGED = 0x311,
WM_PALETTEISCHANGING = 0x310,
WM_PARENTNOTIFY = 0x210,
WM_PASTE = 0x302,
WM_PENWINFIRST = 0x380,
WM_PENWINLAST = 0x38F,
WM_POWER = 0x48,
WM_POWERBROADCAST = 0x218,
WM_PRINT = 0x317,
WM_PRINTCLIENT = 0x318,
WM_PSD_ENVSTAMPRECT = (WM_USER + 5),
WM_PSD_FULLPAGERECT = (WM_USER + 1),
WM_PSD_GREEKTEXTRECT = (WM_USER + 4),
WM_PSD_MARGINRECT = (WM_USER + 3),
WM_PSD_MINMARGINRECT = (WM_USER + 2),
WM_PSD_PAGESETUPDLG = (WM_USER),
WM_PSD_YAFULLPAGERECT = (WM_USER + 6),
WM_QUERYDRAGICON = 0x37,
WM_QUERYENDSESSION = 0x11,
WM_QUERYNEWPALETTE = 0x30F,
WM_QUERYOPEN = 0x13,
WM_QUERYUISTATE = 0x129,
WM_QUEUESYNC = 0x23,
WM_QUIT = 0x12,
WM_RASDIALEVENT = 0xCCCD,
WM_RBUTTONDBLCLK = 0x206,
WM_RBUTTONDOWN = 0x204,
WM_RBUTTONUP = 0x205,
WM_RENDERALLFORMATS = 0x306,
WM_RENDERFORMAT = 0x305,
WM_SETCURSOR = 0x20,
WM_SETFOCUS = 0x7,
WM_SETFONT = 0x30,
WM_SETHOTKEY = 0x32,
WM_SETICON = 0x80,
WM_SETREDRAW = 0xB,
WM_SETTEXT = 0xC,
WM_SETTINGCHANGE = WM_WININICHANGE,
WM_SHOWWINDOW = 0x18,
WM_SIZE = 0x5,
WM_SIZECLIPBOARD = 0x30B,
WM_SIZING = 0x214,
WM_SPOOLERSTATUS = 0x2A,
WM_STYLECHANGED = 0x7D,
WM_STYLECHANGING = 0x7C,
WM_SYNCPAINT = 0x88,
WM_SYSCHAR = 0x106,
WM_SYSCOLORCHANGE = 0x15,
WM_SYSCOMMAND = 0x112,
WM_SYSDEADCHAR = 0x107,
WM_SYSKEYDOWN = 0x104,
WM_SYSKEYUP = 0x105,
WM_TCARD = 0x52,
WM_TIMECHANGE = 0x1E,
WM_TIMER = 0x113,
WM_UNDO = 0x304,
WM_UNINITMENUPOPUP = 0x125,
WM_UPDATEUISTATE = 0x128,
WM_USERCHANGED = 0x54,
WM_VKEYTOITEM = 0x2E,
WM_VSCROLL = 0x115,
WM_VSCROLLCLIPBOARD = 0x30A,
WM_WINDOWPOSCHANGED = 0x47,
WM_WINDOWPOSCHANGING = 0x46,
WM_WININICHANGE = 0x1A,
WM_WNT_CONVERTREQUESTEX = 0x109,
WM_XBUTTONDBLCLK = 0x20D,
WM_XBUTTONDOWN = 0x20B,
WM_XBUTTONUP = 0x20C
}
public static int WIN32_SendMessage( int handle, WM ww,int WParam, int LParam)
{
int wm = (int)ww;
int ret = SendMessage(handle, wm,WParam, LParam);
return ret;
}
}
}