当前位置: 首页 > 面试题库 >

Linux Java Swing应用程序的信息亭模式

郗浩言
2023-03-14
问题内容

如何在[Ubuntu] Linux机器上禁用OS级键盘快捷键(例如Alt-Tab,Ctrl-Alt-左/右等)?我正在开发全屏Java
Swing应用程序,并且不希望用户能够任意切换程序。仅切换“ always on
top”标志始终是不够的。不允许用户切换工作区,转移焦点或任何其他此类事情。在执行应用程序之前和之后,机器必须正常运行。谷歌表示这将需要JNI或JNA,但我正在寻找更多功能。


问题答案:

尝试在您的应用程序中执行此操作没有任何意义,因为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,因此可能会阻止任务切换。



 类似资料:
  • 本文向大家介绍Android ApplicationInfo 应用程序信息的详解,包括了Android ApplicationInfo 应用程序信息的详解的使用技巧和注意事项,需要的朋友参考一下 Android ApplicationInfo 应用程序信息 1、简述 2、获取ApplicationInfo 2.1 、获取手机上安装所有程序对应的 ApplicationInfo 2.2 、获取指定包

  • 在使用谷歌的新功能应用内更新时,我注意到它似乎会返回旧的(以前的)更新信息,而不是正确的最新信息。 Android不久前推出了新的force更新特性:https://developer.Android.com/guide/app-bundle/in-app-updates称为in-app updates 在使用它时,我注意到当根据Google的教程获取应用程序更新信息时,返回的应用程序版本代码有时

  • 我一直在尝试开发一个android应用程序,可以从CIFS/SMB协议中提取信息。我尝试过JCIFS,但由于我的eclipse应用程序无法读取包(即使在我使用Javadoc读取包之后)而不断出现错误,我最后的办法就是寻求帮助。因此,有人能提供如何做到这一点的煽动/信息吗? 我试过这个:复制所有文件从服务器到Android设备 我试过这个:http://jcifs.samba.org/ 我试过这个:

  • class-dump-z简介 class dump是一个命令行工具,它可以dummp出破解之后的iOS二进制文件的头文件信息(后面我们会介绍破解iOS应用的工具Clutch, 这个工具需要安装在iOS设备上,所以放在下一章介绍)。 这些信息与 otool -ov 命令提供的信息是一样的,但它更紧凑,更易读。 为什么要使用class-dump 你可以看到闭源应用程序,框架(framework)和软件

  • 所谓的OEM.EXE也就是右键“我的电脑”属性下方显示的图片跟文字信息,如果不喜欢可到系统目录下的SYSTEM32,删除OEMINFO.INI和OEMLOGO.BMP即可,不影响计算机的运行! 引用脚本的内容: ;该脚本使用 HM VNISEdit 脚本编辑器向导产生 !include "LogicLib.nsh" ; 安装程序初始定义常量 !define PRODUCT_NAME "番薯oe

  • 我们有多个JSP web应用程序,它们都是使用Maven3.5.4版本构建的。我们需要在所有项目上创建相同的URL(可能是或者只是),以返回存储在pom.xml(或pom.properties)中的版本。此外,响应应该以HTML、XML或JSON形式返回,这取决于URL中的参数,但这将是另一回事。 还有20多个项目,我不想复制和粘贴同一个文件,并在所有项目上更改pom.properties文件路径