在启用和禁用关闭按钮已经没有问题了,但对最小化、最大化、还原和移动一直有问题,我的代码如下:
        [DllImport("user32.dll")]
        static extern IntPtr GetSystemMenu(IntPtr hwnd, bool bRevert);
        [DllImport("user32.dll")]
        static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);
        [DllImport("user32.dll")]
        static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);        const uint MF_BYCOMMAND = 0x00; //按命令方式
        const uint MF_GRAYED = 0x01;    //灰掉
        const uint MF_DISABLED = 0x02;  //不可用        /// <summary>
        /// 控制按钮
        /// </summary>
        public enum ControlButton : uint { CloseButton = 0xF060, MaximizeButton = 0xF030, MinimizeButton = 0xF020, RestoreButton = 0xF120, MoveButton = 0xF010 };        public static bool EnableControlButton(IntPtr hForm, bool enable, ControlButton bt)
        {
            IntPtr hMenu = GetSystemMenu(hForm, false);
            bool result = false;            if (hMenu != IntPtr.Zero)
            {
                //启用
                if (enable)
                {
                    if (bt != ControlButton.CloseButton)
                    {
                        result = DeleteMenu(hMenu, (uint)bt, 0);
                    }                    result = EnableMenuItem(hMenu, (uint)bt, 0);
                }
                //禁用
                else
                {
                    if (bt != ControlButton.CloseButton)
                    {
                        result = DeleteMenu(hMenu, (uint)bt, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
                    }                    result = EnableMenuItem(hMenu, (uint)bt, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);                }
            }            return result;
        }