如何禁用 ctrl + Alt + del 和Windows按钮使用C#和wpf ??
我尝试使用某些事件来形成事件,例如按键但失败。
答案 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#