Как вы держите машину без сна?

java windows macos cross-platform operating-system

20182 просмотра

16 ответа

44714 Репутация автора

У меня есть часть серверного программного обеспечения, написанного на Java, для запуска в Windows и OS X. (Он не работает на сервере, а просто на компьютере обычного пользователя - что-то вроде торрент-клиента.) Я хотел бы, чтобы программное обеспечение сигнализировало в ОС, чтобы держать машину в активном состоянии (не допускать ее перехода в спящий режим), пока она активна.

Конечно, я не ожидаю, что будет кросс-платформенное решение, но мне бы хотелось иметь несколько очень минимальных программ / скриптов на Си, которые моё приложение может вызывать, чтобы информировать ОС, чтобы она не спала.

Есть идеи?

Автор: Frank Krueger Источник Размещён: 09.09.2008 08:50

Ответы (16)


1 плюс

46072 Репутация автора

Запустите команду внутри таймера, как пинг сервера.

Автор: Gulzar Nazim Размещён: 09.09.2008 08:54

2 плюса

11643 Репутация автора

Не проще ли отключить управление питанием на сервере? Можно утверждать, что серверы не должны переходить в режим энергосбережения?

Автор: zigdon Размещён: 09.09.2008 08:55

6 плюса

31281 Репутация автора

У меня есть метод грубой силы: перемещать мышь на 1 точку в направлении x, а затем обратно каждые 3 минуты.

Может быть, у меня есть более элегантное решение, но это быстро исправить

Автор: Keng Размещён: 09.09.2008 08:56

14 плюса

12511 Репутация автора

В Windows используйте функцию SystemParametersInfo . Это швейцарская армейская функция, которая позволяет вам получать / устанавливать всевозможные системные настройки.

Чтобы отключить отключение экрана, например:

SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );

Просто обязательно верните его, когда закончите ...

Автор: Matt Dillard Размещён: 09.09.2008 09:05

1 плюс

1203 Репутация автора

Я бы просто сделал функцию (или скачал бесплатное приложение), которая двигает мышь. Не элегантный, но легкий.

Автор: Paulj Размещён: 09.09.2008 09:08

26 плюса

61650 Репутация автора

Решение

Я использую этот код для предотвращения блокировки моей рабочей станции. В настоящее время он настроен на перемещение мыши только раз в минуту, но вы можете легко настроить его.

Это взлом, а не элегантное решение.

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);
        }
    }
}
Автор: ScArcher2 Размещён: 09.09.2008 09:31

4 плюса

11643 Репутация автора

Разве не все предложения, перемещающие мышь назад и вперед, сводят пользователя с ума? Я знаю, что удалю любое приложение, которое сделает это, как только смогу его изолировать.

Автор: zigdon Размещён: 09.09.2008 11:49

2 плюса

12808 Репутация автора

Я уже некоторое время использую 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;
    }
}
Автор: David Crow Размещён: 10.09.2008 01:21

19 плюса

29515 Репутация автора

Я слышал истории о том, как люди получали большой сабвуфер, а затем приклеивали к крышке коробки воздуховод. Затем вы можете положить мышь в коробку и включить музыку. Желательно что-нибудь с большим количеством басов, которое будет держать мышь движущейся вокруг.

Автор: Casey Watson Размещён: 10.09.2008 05:03

2 плюса

10854 Репутация автора

Вы можете использовать программу Caffeine caffiene, чтобы ваша рабочая станция не спала. Вы можете запустить программу с помощью команды open в OS X.

Автор: Milhous Размещён: 18.09.2008 03:32

6 плюса

1082 Репутация автора

Добавление к фрагменту кода 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);
        }
Автор: asloob Размещён: 23.04.2012 11:59

1 плюс

48 Репутация автора

Этот код перемещает указатель в то же место, где он уже находится, чтобы пользователь не заметил никакой разницы.

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);
}
Автор: Javier Carmona Размещён: 13.10.2013 07:00

1 плюс

793 Репутация автора

На OS X просто spawn caffeinate. Это предотвратит спящий режим системы до caffeinateее завершения.

Автор: ihatetoregister Размещён: 18.05.2015 09:46

2 плюса

39 Репутация автора

В Visual Studio создайте простую форму. На панели инструментов перетащите элемент управления Timer на форму. В коде Init установите интервал таймера на 60 секунд (60000 мс). Реализуйте обратный вызов таймера с помощью следующего кода "SendKeys.Send (" {F15} ");" Запустите новую программу.

Движение мыши не требуется.

Редактировать: По крайней мере, на моей рабочей станции Army просто программно генерировать сообщения мыши и ключа недостаточно для того, чтобы моя рабочая станция была подключена и проснулась. Первые постеры с классом Java Robot находятся на правильном пути. Робот JAVA работает на уровне HAL (уровень аппаратной абстракции) или ниже него. Однако я заново создал и протестировал решение Java / Robot, и оно не работало, пока я не добавил Robot.keyPress (123) в код.

Автор: Felinis Размещён: 02.07.2015 07:01

1 плюс

655 Репутация автора

Это будет работать:

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);
        }
    }
}
Автор: Santosh Jadi Размещён: 13.06.2018 09:21

1 плюс

681 Репутация автора

На этом завершается пакетный файл, который генерирует 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"
Автор: Anand Varkey Philips Размещён: 14.02.2019 06:23
Вопросы из категории :
32x32