你如何保持机器清醒?

我有一个用Java编写的服务器软件,可以在Windows和OS X上运行(它不是在服务器上运行,而是在普通用户的PC上运行,就像一个洪stream客户端一样)。我希望软件能够发出信号到操作系统,以保持机器清醒(防止它进入睡眠模式),而它是活跃的。

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

有任何想法吗?

Solutions Collecting From Web of "你如何保持机器清醒?"

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

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

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

在Windows上,使用SystemParametersInfo函数。 这是瑞士军队风格的功能,可以让你获得/设置各种系统设置。

要禁用屏幕关闭,例如:

 SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 ); 

只要确保在完成后将其设置回去即可

我听说有人拿到一个大的低音炮,然后用一个箱盖把音箱盖在上面。 然后你可以把鼠标放在盒子里,把音乐调出来。 最好是有很多低音来保持鼠标的移动。

添加到上面的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); } 

我有一个非常蛮力的技术,在x方向上移动鼠标1点,然后每3分钟回来一次。

我可能有一个更优雅的解决方案,但它是一个快速修复。

不是所有的建议都会让鼠标来回拖动用户发疯吗? 我知道我会删除任何可以做到这一点的应用程序,只要我能够隔离它。

禁用服务器上的电源管理不是更容易吗? 有人可能会争辩说,服务器不应该进入powersave模式?

我一直在使用pmset来控制我的Mac上的睡眠模式,而且很容易集成。 下面是如何从Java调用该程序以禁用/启用睡眠模式的粗略示例。 请注意,您需要root权限来运行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; } } 

您可以使用Caffeine caffiene程序让您的工作站保持清醒。 你可以通过在OS X中的打开命令来运行程序。

在Visual Studio中创建一个简单的表单。 从工具栏中,将一个计时器控件拖到窗体上。 在Init代码中,将计时器间隔设置为60秒(60000毫秒)。 使用以下代码“SendKeys.Send(”{F15}“);” 运行新程序。

没有鼠标移动需要。

编辑:至少在我的陆军工作站,只是编程生成鼠标和键盘消息是不足以保持我的工作站登录和唤醒。 Java Robot类的早期海报正处于正确的轨道上。 JAVA机器人可以在OS的HAL(硬件抽象层)上或下面工作但是我重新创建并测试了Java / Robot解决方案,并且它没有工作 – 直到我在代码中添加了一个Robot.keyPress(123)。

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

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

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

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

在OS X上,只产生caffeinate 。 这将阻止系统睡觉,直到caffeinate终止。