有没有办法拦截 Java 中的系统密钥,以便事件不会传播到操作系统?Ctrl+Alt+Del 或其他与安全相关的组合无关紧要,主要问题是例如 Windows 键。
有问题的程序是一个全屏应用程序,它通过专有协议执行一些远程操作。目前我唯一的想法是通过 JNI 解决这个问题,而 Windows 的解决方案似乎很简单,我不确定 Linux 和 MAC OS X。
我更喜欢有点标准的解决方案,也许有一些用于 Java 游戏的东西。
Java 在操作系统 (OS) 之后处理击键,因此 Java 无法“拦截”它们。虽然,您可以在 C/C++ 中编写特定于操作系统的代码,以拦截击键并使用 JNI 在 Java 中调用它。
这似乎已在 Java 5 中修复,因此您可以试一试。显然,Java API 中的 KeyEvent 类公开了两个 Microsoft Windows 键盘特定事件 - VK_WINDOWS(用于左右键)和VK_CONTEXT_MENU(用于上下文菜单键)。
很可能通过实现 KeyListener 来捕获这些事件,但请注意,如果您尝试单独捕获 Winkey 事件,则必须先触发操作系统的事件处理程序,然后 Java 才能处理它。