0

如果相关,我正在用 C# 编码。

我正在尝试禁用信息亭应用程序的系统热键。这里使用的代码来自:https ://www.codeproject.com/kb/cs/kiosk_cs.aspx?display=print

此人:如何在单击鼠标左键时禁用 Alt 键、Control 键和 Shift 键的按下/按住似乎已成功使用此方法在 Windows 上禁用Alt + F4 。然而,她没有明确说明她使用的是哪个版本的 Windows,只是说其中一个命令在 W8 中不起作用。

不懂代码的人教程:https ://www.youtube.com/watch?v=qQWqGOaZiFI


我尝试过这个。

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

^虽然一直失败。

Marshal.GetLastWin32Error().ToString()

当 ^ 运行时,它返回错误代码"1400"

错误枚举:https ://msdn.microsoft.com/en-us/library/windows/desktop/ms681385(v=vs.85).aspx 。这表明这是“无效窗口句柄”的结果。. 我不知道为什么这是因为“Alt + F4”关闭了当前选定的窗口。我很确定这就是FindWindow(string cls, string wndwText)回报。

我在以下位置添加了“SetLastError = true”

[DllImport("user32.dll", SetLastError = true)] private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk);

现在,注册“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" - "Hot key is already registered"
  • 在 W10 上以 W8 兼容模式运行不会给我与 W8.1 相同的结果。
  • 我正在管理员模式下运行该应用程序。
  • Alt + F4 只是我要禁用的众多系统热键之一。它不是唯一的。
4

0 回答 0