Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在user32.dll中禁用系统热键?_C#_System_Hotkeys_User32_Registerhotkey - Fatal编程技术网

C# 如何在user32.dll中禁用系统热键?

C# 如何在user32.dll中禁用系统热键?,c#,system,hotkeys,user32,registerhotkey,C#,System,Hotkeys,User32,Registerhotkey,如果相关的话,我正在用C#编写代码 我正在尝试禁用信息亭应用程序的系统热键。此处使用的代码来自: 此人:似乎已成功使用此方法在Windows上禁用Alt+F4。然而,她没有明确说明她使用的是哪个版本的Windows,只是说其中一个命令在W8中不起作用 针对不理解代码的用户的教程: 我试过了 RegisterHotKey(this.Handle,int 1,(int)USE_ALT,(int)Keys.F4) ^但还是失败了 Marshal.GetLastWin32Error().ToStrin

如果相关的话,我正在用C#编写代码

我正在尝试禁用信息亭应用程序的系统热键。此处使用的代码来自:

此人:似乎已成功使用此方法在Windows上禁用Alt+F4。然而,她没有明确说明她使用的是哪个版本的Windows,只是说其中一个命令在W8中不起作用

针对不理解代码的用户的教程:


我试过了

RegisterHotKey(this.Handle,int 1,(int)USE_ALT,(int)Keys.F4)

^但还是失败了

Marshal.GetLastWin32Error().ToString()

^运行时,返回错误代码“1400”

错误枚举:。这表明这是“无效窗口句柄”的结果。。我不知道为什么会这样,因为“Alt+F4”会关闭当前选定的窗口。我很确定这就是
FindWindow(stringcls,stringwndwtext)
返回的结果

我在以下内容中添加了“SetLastError=true”

[DllImport(“user32.dll”,SetLastError=true)]
私有静态外部内部寄存器hotkey(IntPtr hwnd、intid、intfsmodifiers、intvk)

现在,注册“Alt+F4”返回“1409”,这意味着“热键已注册”。 这正是重点。它已经注册了,对于这个kiosk应用程序,我需要暂时禁用它。我在这方面的研究表明,我需要使用user32.dll来创建钩子。这正是我正在做或试图做的

我错过什么了吗

我仍然需要一个可靠的证明方法来阻止Alt+F4以及其他系统热键。但是,其他热键:CTRL+W、CTRL+N、CTRL+S、CTRL+A、CTRL+C、CTRL+X、CTRL+V、CTRL+B、CTRL+F和CTRL+H已在Windows 10和8.1上成功阻止


有用信息

  • 值得注意的是,这段代码是在W8.1上编译(构建>发布)、安装和运行的Alt+F4已成功阻止。。。以某种方式但是,其他两个系统热键Alt+TabHome+Up无法注册,原因相同:“1409”-“热键已注册”
  • 在W10上以W8兼容模式运行不会得到与W8.1相同的结果
  • 我正在管理员模式下运行应用程序
  • Alt+F4只是我想要禁用的众多系统热键之一。这不是唯一的一个
我认为这不是禁用ALT+F4行为的正确方法。您的应用程序窗口应该监听
WM_CLOSE
消息,然后直接丢弃该消息。Windows不喜欢您试图弄乱内置热键。在.NET中,这样做的方法是处理事件,然后将
CAncelEventArgs.Cancel
设置为true以取消关闭。您的方法不起作用。这是控制另一个应用程序的包装器。因此,另一个应用程序将是“the”应用程序。这只是为了强制实施一个信息亭环境。更不用说像Alt+Tab这样的热键仍然可以工作。user32.dll就是为此而设计的。NET不允许出于安全原因禁用此类系统功能。所以实际上,如果我的问题是针对user32.dll而不是C#,那么我的问题会更准确。我知道它是有效的,因为我用它来禁用和覆盖几个默认热键。我不敢相信@Martijn Pieters删除了我的答案。对你的问题有一个很好的回答,并且会帮助别人。也许他应该删除错误的答案。