【问题标题】:Use Java to lock a screen使用 Java 锁定屏幕
【发布时间】:2016-06-15 15:09:38
【问题描述】:

基本上我只需要创建一个应用程序(具有某种用户访问权限),它的第一个屏幕是一个全屏窗口,如果不输入有效的用户名和密码,就无法最小化或关闭它。像windows屏幕保护程序之类的东西。可以做到吗?我应该查看哪些库?这就是我所需要的,如果我的问题不完整或不清楚,请随时提问!

【问题讨论】:

    标签: java locking fullscreen


    【解决方案1】:

    有一次,我用 Java 写了一些你无法逃脱的东西。真的不可能。它适用于 Windows。给你:

    import java.awt.Robot;
    import javax.swing.JFrame;
    
    
    public class WindowsSecurity implements Runnable 
    {
      private JFrame frame;
      private boolean running;
    
      public WindowsSecurity(JFrame yourFrame)
      {
        this.frame = yourFrame;
        new Thread(this).start();
      }
    
      public void stop()
      {
         this.running = false;
      }
    
      public void run() {
        try {
          this.terminal.getParentFrame().setAlwaysOnTop(true);
          this.terminal.getParentFrame().setDefaultCloseOperation(0);
          kill("explorer.exe"); // Kill explorer
          Robot robot = new Robot();
          int i = 0;
          while (running) {
             sleep(30L);
             focus();
             releaseKeys(robot);
             sleep(15L);
             focus();
             if (i++ % 10 == 0) {
                 kill("taskmgr.exe");
             }
             focus();
             releaseKeys(robot);
          }
          Runtime.getRuntime().exec("explorer.exe"); // Restart explorer
        } catch (Exception e) {
    
        }
      }
    
      private void releaseKeys(Robot robot) {
        robot.keyRelease(17);
        robot.keyRelease(18);
        robot.keyRelease(127);
        robot.keyRelease(524);
        robot.keyRelease(9);
      }
    
      private void sleep(long millis) {
        try {
          Thread.sleep(millis);
        } catch (Exception e) {
    
        }
      }
    
      private void kill(String string) {
        try {
          Runtime.getRuntime().exec("taskkill /F /IM " + string).waitFor();
        } catch (Exception e) {
        }
      }
    
      private void focus() {
        this.frame.grabFocus();
        this.frame.requestFocus();
      }
    }
    

    此代码的背景: 我编写了某种假终端,我可以在其中显示我想要的一切。例如,愚蠢的 Windows 消息,例如:“找不到键盘,请按任意键继续”。我把它当作学校的玩笑。启动此应用程序并离开房间,它会在一分钟后自动注销 Windows 帐户。但是没想到会有老师用Ctrl-Alt-Del来杀了我的应用。他在我的个人文件中留下了一条信息,他在其中写下了他的所作所为,并以“我打败了你,哈哈我是邪恶的”结束了他的信息。所以,我想和他竞争。然后写了这段代码。他在学校尝试了五次以上以逃离该应用程序,但他不能(我也不能:D)。当然,他可以关闭机器或注销。但目标是访问我的个人文件。

    【讨论】:

    • 对不起,我差点忘了接受答案!并为您的比赛赢得荣誉:P
    • 奇怪,你居然能接受我的回答。你在 Thread.sleep() 之后使用了stop() 吗?还是您重新启动了机器:D?
    • 我重新开始了:P 我接受了你的回答,因为这是一个很好的开始:)
    • 杀死 explorer.exe 很好,但我只是定期(100 毫秒)杀死 Taskmgr.exe,这是必须的。如果您启动 java -jar myjar.jar 的命令提示符被提升(又名管理员),则可以使用!否则 CTRL+ALT+DEL 或 CTRL+SHIFT+ESC 可以调用任务管理器,您可以使用它再次启动 explorer.exe。顺便说一句,调用 requestFocus 和 toFront 的 WindowFocusListener 也有助于弄乱 TaskMgr,但还不足以完全阻止它的使用(RMB 仍然有效)。
    【解决方案2】:

    在任何半体面的操作系统中,操作系统将负责为每个进程分配一个区域或窗口。

    您需要检查执行此操作的每个操作系统方法,并使用 JNI 在本机代码(可能是 C 或 C++)中实现它。

    【讨论】:

    • 是的,但由于我想做一个便携式应用程序,我认为必须有一种方法来产生一个全屏窗口。通过做一些其他的搜索,我发现了这个:download.oracle.com/javase/tutorial/extra/fullscreen/index.html
    • 我认为只有在您的“不最小化或关闭”要求不包括诸如 alt-tab 或 ctrl-alt-del 之类的组合键时才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多