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. ## SendMessage function The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message. ```cs SendMessage (int hwnd, int wMsg, int wParam, int lParam); ``` ### Parameters #### hWnd 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. #### Msg Type: UINT > The message to be sent. For lists of the system-provided messages, see System-Defined Messages. #### wParam Type: WPARAM > Additional message-specific information. #### lParam Type: LPARAM > Additional message-specific information. Here is the implementation of it using C# with PInvoke ```cs //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; } } } ```