C# 如何在user32.dll中禁用系统热键?
如果相关的话,我正在用C#编写代码 我正在尝试禁用信息亭应用程序的系统热键。此处使用的代码来自: 此人:似乎已成功使用此方法在Windows上禁用Alt+F4。然而,她没有明确说明她使用的是哪个版本的Windows,只是说其中一个命令在W8中不起作用 针对不理解代码的用户的教程: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
我试过了
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+Tab和Home+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删除了我的答案。对你的问题有一个很好的回答,并且会帮助别人。也许他应该删除错误的答案。