GetSystemMenu (user32)
Last changed: -68.114.227.157

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

VB Signature:

<DllImport("user32.dll", CallingConvention:=CallingConvention.Cdecl)> _
Private Shared Function GetSystemMenu(ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
End Function

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

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

Sample Code:

public class RemoveXButton
{
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern int GetMenuItemCount(IntPtr hMenu);
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern bool DrawMenuBar(IntPtr hWnd);
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern bool RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);
    private const Int32 MF_BYPOSITION = 0x400;
    private const Int32 MF_REMOVE = 0x1000;

    public static void RemoveCloseButton(Form frm)
    {
        IntPtr hMenu;
        int n;
        hMenu = GetSystemMenu(frm.Handle,false);
        if(hMenu != IntPtr.Zero)
        {
            n = GetMenuItemCount(hMenu);
            if(n > 0)
            {
              RemoveMenu(hMenu, (uint)(n-1), MF_BYPOSITION|MF_REMOVE);
              RemoveMenu(hMenu, (uint)(n-2), MF_BYPOSITION | MF_REMOVE);
              DrawMenuBar(frm.Handle);
            }
        }
    }
}

public class WindowFuncs
{
    [DllImport("user32.dll")]
    static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
    [DllImport("user32.dll")]
    static extern bool DrawMenuBar(IntPtr hWnd);
    [DllImport("user32.dll")]
    static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);
    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();

    private const Int32 MF_GRAYED = 0x1;
    private const Int32 SC_CLOSE = 0xF060;

    public static void RemoveConsoleCloseButton()
    {
        IntPtr handle = GetConsoleWindow();
        IntPtr hMenu = GetSystemMenu(handle, false);

        DeleteMenu(hMenu, SC_CLOSE, MF_GRAYED);
        DrawMenuBar(handle);
    }
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation