尝试在您的应用程序中执行此 *** 作没有任何意义,因为X11和/或窗口管理器将需要处理所有这些更改,因为这些都是对命令的响应。假设您可以控制平台,请选择一个支持信息亭模式的窗口管理器。然后使用窗口管理器的设置启动您的应用程序并进入信息亭模式。
可以执行此 *** 作的窗口管理器选项包括KDE或twm-
kiosk。
(而且,如果您无法控制该平台,则您无论如何都无法让您的应用程序拦截ctrl-alt-backspace之类的东西。)
编辑:
为了缩小这个问题的规模,他愿意放开ctl-alt-backspace之类的东西,只想要大多数键,包括alt-
tab或其他类似的应用程序切换键组合,下面的方法应该起作用:
您应该能够通过JNI
使用XLib的XGrabKeyboard方法执行此 *** 作。此Java
/ XLib
JNI键捕获教程应该是一个很好的起点。但是,它使用XGrabKey只是被动地侦听密钥,并不阻止其他应用程序接收它们。您将改为使用XGrabKeyboard,它可以主动捕获所有正常的键盘事件(如果此 StackOverflow问题的前提是正确的,则包括任务切换键)。
请注意,作为副作用,Swing中的键捕获也可能会停止工作,因为您的Swing窗口将与在C中创建的窗口分开。因此,您可能必须使用JNI界面来获得按键。在需要时将其添加到您的程序中。(尽管我肯定会建议您在编写代码之前先对其进行测试。)如果可以使用Java
AWT本机接口获取窗口,则可以避免这种情况。获取窗口ID。(请注意,Swing是在AWT之上构建的,因此这将适用于Swing。)但是,我不确定如何执行此 *** 作。看起来您可能能够通过从“显示器”获取根窗口并从那里查找窗口来导航窗口树,但这有点奇怪。如果AWT
NI只是告诉您窗口ID,那就好了,但是看起来不像那样。
正如此警告提醒:XGrabKeyboard不是安全界面上所述,这不会使其他程序看不到密钥,但是窗口管理器似乎不会使用XQueryKeyMap,因此可能会阻止任务切换。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)