我有一个我正在处理的kiosk GUI应用程序,它要求我阻止用户从全屏窗口中删除Alt-Tab。我在一段时间后发布了一个关于此问题的问题,一位成员帮助我编写了一些代码,这些代码在Windows环境下运行良好。
这是:
public class TabStopper implements Runnable {
private boolean isWorking = false;
private MenuFrame parent;
public TabStopper(MenuFrame parent) {
this.parent = parent;
new Thread(this, "TabStopper").start();
}
public void run() {
this.isWorking = true;
Robot robot;
try {
robot = new Robot();
while (isWorking) {
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyRelease(KeyEvent.VK_TAB);
parent.requestFocus();
Thread.sleep(10);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void stop() {
this.isWorking = false;
}
public boolean isWorking() {
return this.isWorking;
}
}
但是,我需要这个能够在Linux中工作。我从源代码创建了一个可执行jar,并将其引入Linux。除Alt和Tab键之外的所有功能都在不断按下。我的GUI上的按钮一直在循环,我能够打开一个终端(我在测试期间在应用程序中设置一个后门,以防万一这样的事情发生),这不会让我输入任何内容,因为Tab列出了所有文件当前目录。
有人能告诉我是否有适用于Linux和Windows环境的修复程序。但是,如果我不得不选择,我会选择Linux。
编辑:我还可以确认Alt键正在“按下”。这怪异的行为是什么?
答案 0 :(得分:3)
忘记用这样的黑客攻击Alt + Tab。这是一个糟糕的黑客,它容易出错。还有很多其他的热键组合。
对于Linux,您有两种选择:
根本不使用最小窗口管理器或窗口管理器。例如,使用fluxbox,您可以完全删除所有键绑定,也可以默认使应用程序最大化等。您可以清空桌面菜单,以便即使应用程序崩溃,用户也无法控制即可。这是一个干净的解决方案,可以真正解决您的问题,而不是部分部分。除了Alt + Tab之外,还有很多方法可以摆弄系统。
完全抓取输入控件。这就是游戏的功能。例如,libSDL为您完成它,并且还有用于该功能的java包装器。这也应该按预期工作,除了你使用一个窗口管理器,默认情况下不允许输入控制抓取(我不知道)。