wpf停止控制+;Alt+;del和windows按钮使用C#
如何使用带wpf的C#禁用ctrl+Alt+del和windows按钮wpf停止控制+;Alt+;del和windows按钮使用C#,c#,wpf,C#,Wpf,如何使用带wpf的C#禁用ctrl+Alt+del和windows按钮 我尝试使用一些事件,比如按键按下,但失败了。塔马斯·皮罗斯(Tamas Piros)就这个问题写了一篇很好的文章 也应该在WPF中工作不可能专门禁用Ctrl-Alt-Del的快捷键, 这是因为Ctrl-Alt-Del组合是一个深度烘焙的系统调用 但是,可以单独筛选这些快捷键,这样就可以使用这些键阻止其他快捷键。 要做到这一点,您需要连接到操作系统事件: 这将钩住系统事件 private delegate IntPtr Lo
我尝试使用一些事件,比如按键按下,但失败了。塔马斯·皮罗斯(Tamas Piros)就这个问题写了一篇很好的文章
也应该在WPF中工作不可能专门禁用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
}
}
私有静态IntPtr CaptureKey(int nCode、IntPtr wp、IntPtr lp)
{
if(nCode<0)返回(IntPtr)1;//CallNextHookEx(_ptrHook,nCode,wp,lp);
KBDLLHOOKSTRUCT objKeyInfo=(KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lp,typeof(KBDLLHOOKSTRUCT));
if(objKeyInfo.key==/*某个key*/){
//做点什么
}
}
使用此功能时,您可以从objKeyInfo.key
有关Ctrl
-Alt
-Del
组合的更多背景信息:
基本摘要:“您的程序本身无法禁用它,但您可以从程序内部设置一些注册表值,以更改组策略规则,从而禁用从Ctrl+Alt+Del启动任务管理器”。