InsertMenu (user32)
Last changed: -218.110.141.239

.
Summary

C#:

[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool InsertMenu(IntPtr hmenu, uint position, uint flags,
       uint item_id, [MarshalAs(UnmanagedType.LPTStr)]string item_text);

VB

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Friend Shared Function InsertMenu(ByVal hMenu As IntPtr, ByVal uPosition As Integer,
       ByVal uFlags As Integer, ByVal uIDNewItem As Integer,
       <MarshalAs(UnmanagedType.LPTStr)> ByVal lpNewItem As String) As Boolean
End Function

User-Defined Types:

None.

Notes:

Be sure to always set SetLastError in your Win32 imports. The sample code below shows how you can make use of it.

Tips & Tricks:

Without the CharSet attribute flag, the WinAPI may not know which underlying InsertMenu to call (the A version or the W version).

Sample Code:

C#:

if (!InsertMenu(hmenu, position++,
       (uint)(MF.BYPOSITION | MF.SEPARATOR), id++, "Menu Item"))
    throw new Win32Exception(Marshal.GetLastWin32Error());

Example Usages/Links:

Add System Menu Items to WPF Window using Win32 API:

http://pietschsoft.com/post/2008/03/27/Add-System-Menu-Items-to-WPF-Window-using-Win32-API.aspx

Add System Menu Items to a Form using Windows API:

http://pietschsoft.com/post/2008/03/04/Add-System-Menu-Items-to-a-Form-using-Windows-API.aspx

Alternative Managed API:

None.

Documentation
InsertMenu on MSDN