Java awt.Robot:CTRL+ALT+DEL不能带出所需的屏幕

5

我最近刚发现了 awt.Robot 库,非常兴奋地想要使用它。我想开个小玩笑给我的朋友,让机器人按下控制键、交替键和删除键,然后按下锁定计算机按钮,但是我无法让程序打开控制交替删除屏幕。

这是我的代码:

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);
}
}

我想这与那有关,尽管我不知道如何规避它。 - Bobby Strickland
可能会有一些变通方法,这取决于你想要实现什么。我曾经遇到过同样的问题。 - TheLostMind
请参考以下链接:https://dev59.com/IGrWa4cB1Zd3GeqP-F7m - Amr Lotfy
2个回答

5
不能在Windows XP(+补丁?)之后使用模拟键事件的方式完成此操作。

根据一篇旧文章中的评论,展示了如何曾经可以模拟此操作:

出于安全原因,在Vista上我们不能广播热键消息以模拟CTRL ALT DEL。要在VISTA上执行此操作,您需要使用一个特殊库"SASLIB",默认情况下不提供...


无论如何,如果您直接使用Win32(或其他操作系统)API,则可能可以访问执行任务所需的适当API。例如,请参阅LockWorkStation:

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


请参见是否有Java库可以访问本机Windows API?,了解如何访问本机(Windows)API的相关信息。



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

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接