1、在主窗口构造函数或加载事件中设置全屏
public MainWindow()
{
InitializeComponent();
// 设置全屏
this.WindowState = WindowState.Maximized;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
this.Topmost = true; // 确保窗口在最前
}
2、使用低级键盘钩子屏蔽热键
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Input;
public class KeyBoardHook
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private const int WM_SYSKEYDOWN = 0x0104;
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("user32.dll")]
private static extern short GetKeyState(int nVirtKey);
private IntPtr _hookID = IntPtr.Zero;
private LowLevelKeyboardProc _proc;
public void HookKeyboard()
{
_proc = HookCallback;
_hookID = SetHook(_proc);
}
public void UnhookKeyboard()
{
UnhookWindowsHookEx(_hookID);
}
private IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN))
{
int vkCode = Marshal.ReadInt32(lParam);
// 检查Alt键是否按下
bool isAltDown = (GetKeyState(0x12) & 0x8000) != 0; // 0x12是VK_MENU(Alt键)
// 屏蔽Win键、Alt+Tab、Ctrl+Esc等
if (vkCode == 91 || vkCode == 92 || // Win键
(vkCode == 9 && (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))) || // Alt+Tab
(vkCode == 27 && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))) // Ctrl+Esc
{
return (IntPtr)1; // 屏蔽按键
}
// 屏蔽Alt+Tab
if (vkCode == 9 && isAltDown) // Tab键
{
return (IntPtr)1;
}
// 屏蔽Alt+空格
if (vkCode == 32 && isAltDown) // 空格键
{
return (IntPtr)1;
}
// 屏蔽Alt+F4
if (vkCode == 115 && isAltDown) // F4键
{
return (IntPtr)1;
}
// 屏蔽Alt+Esc
if (vkCode == 27 && isAltDown) // Esc
{
return (IntPtr)1;
}
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
}
3、在应用加载程序中全局调用
private KeyBoardHook _keyboardHook;
protected override void OnStartup(StartupEventArgs e)
{
//低级键盘钩子全局调用
_keyboardHook = new KeyBoardHook();
_keyboardHook.HookKeyboard();
base.OnStartup(e);
}
protected override void OnExit(ExitEventArgs e)
{
// 确保在退出时正确停止键盘拦截器
_keyboardHook.UnhookKeyboard();
base.OnExit(e);
}

2340

被折叠的 条评论
为什么被折叠?



