5

我最近刚刚发现了 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);
}
}
4

2 回答 2

5

这不能在 Windows XP 1(+补丁?)中通过模拟关键事件来完成。

这里对一篇旧文章的评论中可以看出过去是如何模拟的:

在 Vista 上出于安全原因,我们不能广播热键消息来模拟 CTRL ALT DEL。要在 VISTA 上执行此操作,您需要使用默认未提供的特殊库“SASLIB”...

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

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

请参阅是否有 Java 库来访问本机 Windows API?获取有关如何访问本机 (Windows) API 的线索。


1根据操作的描述,我假设目标是 Windows。

于 2013-11-05T06:12:37.237 回答
0

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

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

try {

    Runtime.getRuntime().exec("rundll32 user32.dll,LockWorkStation");

} catch (IOException ex) {
    Logger.getLogger(TimeFrame.class.getName()).log(Level.SEVERE, null, ex);
}
于 2017-12-21T23:08:49.423 回答