gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:07 29 4
gpt4 key购买 nike

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

我尝试使用一些事件形式的事件,例如按键但失败了。

最佳答案

无法禁用 Ctrl-Alt-Del 的快捷方式,具体来说,这是因为 Ctrl-Alt-Del 组合是一个深度烘焙的系统调用。

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


这与系统事件 Hook 。

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# 中的实际键所必需的。

这可以通过给委托(delegate)一个函数来使用:

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 获取 key

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

关于c# - wpf 使用 C# 停止 ctrl+Alt+del 和 windows 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351697/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com