rendered paste bodyusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace InsertMenuItem
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
IntPtr hmenu = UnsafeNativeMethods.GetSystemMenu(new HandleRef(this, Handle), false);
NativeMethods.MENUITEMINFO_T newMenuItem = new NativeMethods.MENUITEMINFO_T();
newMenuItem.fMask = NativeMethods.MIIM_ID | NativeMethods.MIIM_STATE |
NativeMethods.MIIM_SUBMENU | NativeMethods.MIIM_TYPE | NativeMethods.MIIM_DATA;
newMenuItem.fType = 0;
newMenuItem.fState = 0;
newMenuItem.wID = myCommandId;
newMenuItem.hbmpChecked = IntPtr.Zero;
newMenuItem.hbmpUnchecked = IntPtr.Zero;
newMenuItem.dwItemData = IntPtr.Zero;
newMenuItem.dwTypeData = "My Added Menu ...";
newMenuItem.cch = 0;
UnsafeNativeMethods.InsertMenuItem(new HandleRef(this, hmenu), 0, true, newMenuItem);
NativeMethods.MENUITEMINFO_T separatorItem = new NativeMethods.MENUITEMINFO_T();
separatorItem.fMask = NativeMethods.MIIM_ID | NativeMethods.MIIM_STATE |
NativeMethods.MIIM_SUBMENU | NativeMethods.MIIM_TYPE | NativeMethods.MIIM_DATA;
separatorItem.fType = NativeMethods.MFT_MENUBREAK;
UnsafeNativeMethods.InsertMenuItem(new HandleRef(this, hmenu), 1, true, separatorItem);
hmenu = IntPtr.Zero;
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case NativeMethods.WM_SYSCOMMAND:
int command = NativeMethods.Util.LOWORD(m.WParam);
if (command == myCommandId)
{
MessageBox.Show("In handler");
}
break;
}
base.WndProc(ref m);
}
private const int myCommandId = 0;
}
static class NativeMethods
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class MENUITEMINFO_T
{
public int cbSize = Marshal.SizeOf(typeof(MENUITEMINFO_T));
public int fMask;
public int fType;
public int fState;
public int wID;
public IntPtr hSubMenu;
public IntPtr hbmpChecked;
public IntPtr hbmpUnchecked;
public IntPtr dwItemData;
public string dwTypeData;
public int cch;
}
public const int MIIM_STATE = 0x00000001,
MIIM_ID = 0x00000002,
MIIM_SUBMENU = 0x00000004,
MIIM_TYPE = 0x00000010,
MIIM_DATA = 0x00000020,
MFT_MENUBREAK = 0x00000040,
WM_SYSCOMMAND = 0x0112;
public static class Util
{
public static int LOWORD(int n)
{
return n & 0xffff;
}
public static int LOWORD(IntPtr n)
{
return LOWORD(unchecked((int)(long)n));
}
}
}
static class UnsafeNativeMethods
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public extern static bool InsertMenuItem(HandleRef hMenu, int uItem, bool fByPosition, NativeMethods.MENUITEMINFO_T lpmii);
[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern IntPtr GetSystemMenu(HandleRef hWnd, bool bRevert);
}
}