wpf使用C#停止ctrl + Alt + del和windows按钮

时间:2014-01-25 14:22:13

标签: c# wpf

如何禁用 ctrl + Alt + del 和Windows按钮使用C#和wpf ??

我尝试使用某些事件来形成事件,例如按键但失败。

2 个答案:

答案 0 :(得分:0)

Tamas Piros写了一篇关于这个主题的好文章 http://tamas.io/c-disable-ctrl-alt-del-alt-tab-alt-f4-start-menu-and-so-on/ 也应该在WPF中工作

答案 1 :(得分:0)

无法禁用 Ctrl - Alt - Del 的快捷方式,具体而言 这是因为 Ctrl - Alt - Del 组合是一个深受欢迎的系统调用。

但是可以单独过滤它们,因此您可以使用这些键阻止其他快捷方式。 要做到这一点,你需要挂钩操作系统事件:

这会挂钩系统事件。

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int id, LowLevelKeyboardProc callback, IntPtr hMod, uint dwThreadId);

如果你将id设置为13,它将挂钩到键盘输入。

在回调中你需要几件事:

[StructLayout(LayoutKind.Sequential)]
private struct KBDLLHOOKSTRUCT
{
    public readonly Keys key;
    private readonly int scanCode;
    private readonly int flags;
    private readonly int time;
    private readonly IntPtr extra;
}

这个结构需要读取c#中的实际键。

这可以通过为委托提供如下函数来使用:

private static IntPtr CaptureKey(int nCode, IntPtr wp, IntPtr lp)
{
    if (nCode < 0) return (IntPtr) 1; //CallNextHookEx(_ptrHook, nCode, wp, lp);
    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lp, typeof(KBDLLHOOKSTRUCT));
    if(objKeyInfo.key == /*some key*/){
        // do something
    }
}

使用此功能时,您可以从objKeyInfo.key

获取密钥

了解有关Ctrl - Alt - Del组合的更多背景信息: Is there any method to disable logoff,lock and taskmanager in ctrl+alt+del in C#