Как вы поддерживаете машину?
У меня есть часть программного обеспечения server-ish, написанная на Java для работы в Windows и OS X. (Она не работает на сервере, а просто обычный пользовательский ПК - что-то вроде торрент-клиента.) Я бы хотел, чтобы программное обеспечение, чтобы сигнализировать ОС, чтобы система не просыпалась (не позволяя ей переходить в спящий режим), пока она активна.
Конечно, я не ожидаю, что это будет кросс-платформенное решение, но я хотел бы иметь очень минимальные C-программы/скрипты, которые мое приложение может появиться, чтобы сообщить ОС, чтобы они не спали.
Любые идеи?
Ответы
Ответ 1
Я использую этот код, чтобы моя рабочая станция не блокировалась. В настоящее время он настроен только на перемещение мыши раз в минуту, вы можете легко его отрегулировать.
Это взломать, а не изящное решение.
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
Я слышал истории о том, что люди получают большой сабвуфер, а затем прокладывают ленту на крышке коробки вверх. Затем вы можете поместить мышь в окно и включить музыку. Предпочтительно что-то с большим количеством басов, которые будут удерживать мышь.
Ответ 3
В Windows используйте функцию SystemParametersInfo. Это функция швейцарского армейского стиля, которая позволяет вам получать/устанавливать всевозможные системные настройки.
Чтобы отключить отключение экрана, например:
SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );
Просто верните его, когда закончите...
Ответ 4
У меня очень грубая техника перемещения мыши 1-й точки в направлении x, а затем назад каждые 3 минуты.
Там может быть более элегантное решение, но это быстрое решение.
Ответ 5
Добавление в фрагмент кода sccher2 выше и перемещение мыши всего на 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
Не все ли предложения, перемещающие мышь назад и вперед, приводят пользователя в бешенство? Я знаю, что я удалю любое приложение, которое сделает это, как только я смогу его изолировать.
Ответ 7
Не было бы проще отключить управление питанием на сервере? Можно утверждать, что серверы не должны переходить в режим энергосбережения?
Ответ 8
Я использовал pmset для управления режимом сна на моем Mac некоторое время, и это довольно легко интегрировать. Вот пример того, как вы могли бы вызвать эту программу из Java, чтобы отключить/включить режим сна. Обратите внимание, что для запуска pmset необходимы привилегии root, поэтому вам понадобится запустить эту программу.
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
Вы можете использовать программу Caffeine caffiene, чтобы ваша рабочая станция не спала. Вы можете запустить программу через команду open в os X.
Ответ 10
В Visual Studio создайте простую форму.
На панели инструментов перетащите элемент управления таймера в форму.
В коде Init установите интервал таймера на 60 секунд (60000 мс).
Внедрите обратный вызов таймера со следующим кодом "SendKeys.Send(" {F15} ");
Запустите новую программу.
Не требуется движения мыши.
Изменить: по крайней мере, на моей рабочей станции в армии просто программно генерировать сообщения с мышью и клавишами недостаточно, чтобы моя рабочая станция зашла в систему и проснулась. Ранние плакаты с классом Java Robot находятся на правильном пути. JAVA Robot работает или находится под OS HAL (уровень абстракции оборудования). Однако я воссоздал и протестировал решение Java/Robot, и оно не сработало - пока я не добавил код Robot.keyPress(123) в код.
Ответ 11
Запустите команду внутри таймера, например, пинговать сервер.
Ответ 12
Я бы просто выполнил функцию (или загрузил приложение для халявы), которая перемещает мышь. Неэлегантно, но легко.
Ответ 13
Этот код перемещает указатель в том же месте, где он уже есть, поэтому пользователь не замечает никакой разницы.
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
В OS X просто введите caffeinate
. Это предотвратит спящий режим системы до тех пор, пока caffeinate
не будет завершен.
Ответ 15
Это будет работать:
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
Здесь завершен пакетный файл, который генерирует код 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"
Ответ 17
Один простой способ, который я использую, чтобы избежать "Автоблокировка рабочего стола Windows" - это "Включение/выключение NumLock" каждые 6 секунд.
Здесь Java-программа для включения/выключения NumLock.
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class NumLock extends Thread {
public void run() {
try {
boolean flag = true;
do {
flag = !flag;
Thread.sleep(6000);
Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent. VK_NUM_LOCK, flag);
}
while(true);
}
catch(Exception e) {}
}
public static void main(String[] args) throws Exception {
new NumLock().start();
}
}
Запустите эту Java-программу в отдельной командной строке; :-)