WPFのアプリで、Alt + F4を無効にする
WPFのアプリで、Alt + F4を無効にする方法。
Alt + F4押下時に発行されるWM_SYSKEYDOWNを拾って、
それを処理しちゃった♪と嘘をつく。
すると、Alt + F4押したのに、反応しないということに!
原理は簡単ですね。
using System.Windows.Interop; const int WM_SYSKEYDOWN = 0x0104; const int VK_F4 = 0x73; /// <summary> /// Loadedイベントハンドラ /// </summary> private void OnLoaded(object sender, RoutedEventArgs e) { HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle); source.AddHook(new HwndSourceHook(WndProc)); } private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if ((msg == WM_SYSKEYDOWN) && (wParam.ToInt32() == VK_F4)) { handled = true; } return IntPtr.Zero; }
またWndProcを次のようにすると、タスクバーの右クリックメニュー?「閉じる」を選んでも閉じなくなる。
const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if ((msg == WM_SYSCOMMAND) && (wParam.ToInt32() == SC_CLOSE)) { handled = true; } return IntPtr.Zero; }