代码之家  ›  专栏  ›  技术社区  ›  Frank Krueger

你如何使机器保持清醒?

  •  25
  • Frank Krueger  · 技术社区  · 16 年前

    我有一个用Java编写的服务器ISH软件,可以在Windows和OS X上运行(它不是在服务器上运行,而是一个普通用户的PC——就像一个激流客户端)。我希望这个软件向OS发出信号,以使机器在活动时保持清醒(防止它进入睡眠模式)。

    当然,我不希望有一个跨平台的解决方案,但我希望有一些非常小的C程序/脚本,我的应用程序可以产生通知操作系统保持清醒。

    有什么想法吗?

    16 回复  |  直到 6 年前
        1
  •  26
  •   ScArcher2    16 年前

    我使用这个代码来防止我的工作站被锁定。它目前只设置为每分钟移动一次鼠标,但是您可以很容易地调整它。

    这是一个黑客,而不是一个优雅的解决方案。

    import java.awt.*;
    import java.util.*;
    public class Hal{
    
        public static void main(String[] args) throws Exception{
            Robot hal = new Robot();
            Random random = new Random();
            while(true){
                hal.delay(1000 * 60);
                int x = random.nextInt() % 640;
                int y = random.nextInt() % 480;
                hal.mouseMove(x,y);
            }
        }
    }
    
        2
  •  19
  •   Casey Watson    15 年前

    我听说过有人拿了一个大的超低音扬声器,然后用胶带把盒盖固定到顶部。然后你可以把鼠标放到盒子里,打开音乐。最好是有很多低音的东西,可以让鼠标保持移动。

        3
  •  14
  •   Matt Dillard    16 年前

    在Windows上,使用 SystemParametersInfo 功能。它是一个瑞士军队风格的功能,允许您获取/设置各种系统设置。

    要禁用屏幕关闭,例如:

    SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );
    

    完成后一定要把它放回去…

        4
  •  6
  •   Keng    16 年前

    我有一种非常暴力的方法,将鼠标沿X方向移动1点,然后每3分钟后退一次。

    也许我有一个更优雅的解决方案,但它是一个快速解决方案。

        5
  •  6
  •   Ashok M A AlwaysALearner    8 年前

    在上面添加scarcher2的代码片段,只移动鼠标1个像素。我移动了两次鼠标,即使指针处于极端状态,也会发生一些变化:

    while(true){
                hal.delay(1000 * 30);       
                Point pObj = MouseInfo.getPointerInfo().getLocation();
                System.out.println(pObj.toString() + "x>>" + pObj.x + "  y>>" + pObj.y);
                hal.mouseMove(pObj.x + 1, pObj.y + 1);  
                hal.mouseMove(pObj.x - 1, pObj.y - 1);
                pObj = MouseInfo.getPointerInfo().getLocation();
                System.out.println(pObj.toString() + "x>>" + pObj.x + "  y>>" + pObj.y);
            }
    
        6
  •  4
  •   zigdon    16 年前

    将鼠标前后移动的所有建议难道不会让用户发疯吗?我知道我会删除任何一个应用程序,只要我能隔离它就可以做到这一点。

        7
  •  2
  •   zigdon    16 年前

    禁用服务器上的电源管理不是更容易吗?可能有人认为服务器不应该进入省电模式?

        8
  •  2
  •   David Crow    16 年前

    我一直在使用 pmset 在我的Mac上控制一段时间的睡眠模式,很容易集成。下面是如何从Java调用该程序到禁用/启用休眠模式的一个粗略示例。注意,您需要根权限来运行pmset,因此您需要它们来运行这个程序。

    import java.io.BufferedInputStream;
    import java.io.IOException;
    
    /**
     * Disable sleep mode (record current setting beforehand), and re-enable sleep
     * mode. Works with Mac OS X using the "pmset" command.
     */
    public class SleepSwitch {
    
        private int sleepTime = -1;
    
        public void disableSleep() throws IOException {
            if (sleepTime != -1) {
                // sleep time is already recorded, assume sleep is disabled
                return;
            }
    
            // query pmset for the current setting
            Process proc = Runtime.getRuntime().exec("pmset -g");
            BufferedInputStream is = new BufferedInputStream(proc.getInputStream());
            StringBuffer output = new StringBuffer();
            int c;
            while ((c = is.read()) != -1) {
                output.append((char) c);
            }
            is.close();
    
            // parse the current setting and store the sleep time
            String outString = output.toString();
            String setting = outString.substring(outString.indexOf(" sleep\t")).trim();
            setting = setting.substring(7, setting.indexOf(" ")).trim();
            sleepTime = Integer.parseInt(setting);
    
            // set the sleep time to zero (disable sleep)
            Runtime.getRuntime().exec("pmset sleep 0");
        }
    
        public void enableSleep() throws IOException {
            if (sleepTime == -1) {
                // sleep time is not recorded, assume sleep is enabled
                return;
            }
    
            // set the sleep time to the previously stored value
            Runtime.getRuntime().exec("pmset sleep " + sleepTime);
    
            // reset the stored sleep time
            sleepTime = -1;
        }
    }
    
        9
  •  2
  •   Milhous    16 年前

    你可以用咖啡因程序 caffiene 使您的工作站保持唤醒状态。您可以通过OSX中的open命令运行该程序。

        10
  •  2
  •   Felinis    9 年前

    在Visual Studio中创建简单表单。 从工具栏中,将计时器控件拖到窗体上。 在初始化代码中,将计时器间隔设置为60秒(60000毫秒)。 使用以下代码“sendKeys.send(f15”);”实现计时器回调。 运行新程序。

    不需要鼠标移动。

    编辑:至少在我的陆军工作站上,仅仅通过编程生成鼠标和键消息还不足以让我的工作站保持登录和唤醒状态。早期的带有Java机器人类的海报在正确的轨道上。JAVA机器人在OS的HAL(硬件抽象层)上或下面工作,但是我重新创建和测试了Java/Advor解决方案,但它不起作用,直到我添加了一个机器人。

        11
  •  1
  •   Gulzar Nazim    16 年前

    在计时器内运行命令,如ping服务器..

        12
  •  1
  •   Paulj    16 年前

    我只需要做一个移动鼠标的功能(或者下载一个免费的应用程序)。不雅,但容易。

        13
  •  1
  •   Javier Carmona    11 年前

    此代码将指针移动到已经存在的相同位置,这样用户就不会注意到任何差异。

    while (true) {
        Thread.sleep(180000);//this is how long before it moves
        Point mouseLoc = MouseInfo.getPointerInfo().getLocation();
        Robot rob = new Robot();
        rob.mouseMove(mouseLoc.x, mouseLoc.y);
    }
    
        14
  •  1
  •   norq    9 年前

    在OS X上,生成 caffeinate . 这将阻止系统休眠,直到 咖啡酸 终止。

        15
  •  1
  •   Santosh Jadi    6 年前

    这将起作用:

    public class Utils {
        public static void main(String[] args) throws AWTException {
            Robot rob = new Robot();
            PointerInfo ptr = null;
            while (true) {
                rob.delay(4000);  // Mouse moves every 4 seconds
                ptr = MouseInfo.getPointerInfo();
                rob.mouseMove((int) ptr.getLocation().getX() + 1, (int) ptr.getLocation().getY() + 1);
            }
        }
    }
    
        16
  •  1
  •   Anand Varkey Philips Rohit upadhyay    6 年前

    这里完成了生成Java代码的批处理文件,编译它,清理生成的文件,并在后台运行。(您的笔记本电脑上需要JDK)

    只需运行此BAT文件;)

    @echo off
    setlocal
    
    rem rem if JAVA is set and run from :startapp labeled section below, else the program exit through :end labeled section.
    if not "[%JAVA_HOME%]"=="[]" goto start_app
    echo. JAVA_HOME not set. Application will not run!
    goto end
    
    
    :start_app
    echo. Using java in %JAVA_HOME%
    rem writes below code to Energy.java file.
    @echo import java.awt.MouseInfo; > Energy.java
    @echo import java.awt.Point; >> Energy.java
    @echo import java.awt.Robot; >> Energy.java
    @echo //Mouse Movement Simulation >> Energy.java
    @echo public class Energy { >> Energy.java
    @echo     public static void main(String[] args) throws Exception { >> Energy.java
    @echo         Robot energy = new Robot(); >> Energy.java
    @echo         while (true) { >> Energy.java
    @echo             energy.delay(1000 * 60); >> Energy.java
    @echo             Point pObj = MouseInfo.getPointerInfo().getLocation(); >> Energy.java
    @echo             Point pObj2 = pObj;  >> Energy.java
    @echo             System.out.println(pObj.toString() + "x>>" + pObj.x + "  y>>" + pObj.y); >> Energy.java
    @echo             energy.mouseMove(pObj.x + 10, pObj.y + 10); >> Energy.java
    @echo             energy.mouseMove(pObj.x - 10, pObj.y - 10); >> Energy.java
    @echo             energy.mouseMove(pObj2.x, pObj.y); >> Energy.java
    @echo             pObj = MouseInfo.getPointerInfo().getLocation(); >> Energy.java
    @echo             System.out.println(pObj.toString() + "x>>" + pObj.x + "  y>>" + pObj.y); >> Energy.java
    @echo         } >> Energy.java
    @echo     } >> Energy.java
    @echo } >> Energy.java
    
    rem compile java code.
    javac Energy.java
    rem run java application in background.
    start javaw Energy
    echo. Your Secret Energy program is running...
    goto end
    
    :end
    rem clean if files are created.
    pause
    del "Energy.class"
    del "Energy.java"