[WPF疑难]禁用窗口上的关闭按钮
namespace VersatileMessageBoxLib { using System; using System.Windows.Interop; using System.Runtime.InteropServices; public class CloseButton { [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] private static extern int GetSystemMenu(int hwnd, int revert); [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] private static extern int EnableMenuItem(int menu, int ideEnableItem, int enable); private const int SC_CLOSE = 0xF060; private const int MF_BYCOMMAND = 0x00000000; private const int MF_GRAYED = 0x00000001; private const int MF_ENABLED = 0x00000002; private CloseButton() { } public static void Disable(int handle) { // The return value specifies the previous state of the menu item // (it is either MF_ENABLED or MF_GRAYED). 0xFFFFFFFF indicates that // the menu item does not exist. switch (EnableMenuItem(GetSystemMenu(handle, 0), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED)) { case MF_ENABLED: break; case MF_GRAYED: break; case -1: throw new Exception("The Close menu item does not exist."); default: break; } } }
在使用时:调用CloseButton.Disable(int handle)方法将窗口句柄传进去就可以了,如果是WPF窗口的化,可以使用
int handle = new WindowInteropHelper(window).Handle.ToInt32();
来取得句柄,WindowForms窗口的句柄是可以直接取得的。