Java awt.Robot:CTRL + ALT + DEL没有显示所需的屏幕

我刚刚发现了关于awt.Robot库的内容,我很高兴能够使用它。 我以为我会对我的朋友玩一个小恶作剧,并有机器人按下控制,alt,删除按下锁定电脑按钮,但我无法让程序调出控制alt删除屏幕。

这是我的代码:

import java.awt.*; import java.awt.event.KeyEvent; public class Bot { public static void main(String[] args) { try { Robot bot = new Robot(); bot.delay(4000); bot.keyPress(KeyEvent.VK_CONTROL); bot.delay(100); bot.keyPress(KeyEvent.VK_ALT); bot.delay(100); bot.keyPress(KeyEvent.VK_DELETE); bot.delay(500); bot.keyRelease(KeyEvent.VK_CONTROL); bot.keyRelease(KeyEvent.VK_ALT); bot.keyRelease(KeyEvent.VK_DELETE); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void pressEnter(Robot bot) { bot.keyPress(KeyEvent.VK_ENTER); bot.delay(40); bot.keyRelease(KeyEvent.VK_ENTER); } } 

在使用模拟键事件的Windows XP 1 (+补丁?)中无法完成此操作。

从这里的评论中看到一篇旧文章,展示了以前如何模拟它:

出于安全原因,我们无法播放热键消息以模拟CTRL ALT DEL。 要在VISTA上执行此操作,您需要使用默认情况下未提供的特殊库“SASLIB”…

无论如何,如果您直接使用Win32(或任何操作系统)API,您可能有权访问相应的API来执行任务。 例如,请参阅LockWorkStation :

此function与按Ctrl + Alt + Del并单击“锁定工作站”的结果相同。

请参阅是否有Java库来访问本机Windows API? 了解如何访问本机(Windows)API。


1从操作说明我假设目标是Windows。

我查找了如何通过命令行访问Ctrl + Alt + Del ,不幸的是,这是不可能的。

但是,可以使用以下代码通过命令行锁定计算机:

 try { Runtime.getRuntime().exec("rundll32 user32.dll,LockWorkStation"); } catch (IOException ex) { Logger.getLogger(TimeFrame.class.getName()).log(Level.SEVERE, null, ex); }