Pergunta

Eu tenho um pedaço de servidor-ish software escrito em Java para executar o Windows e o mac OS X.(Ele não é executado em um servidor, mas apenas um usuário normal do PC - algo como um cliente torrent.) Eu gostaria que o software de sinal para o sistema operacional para manter a máquina acordado (a impede de entrar em modo de suspensão) enquanto estiver ativa.

É claro que eu não espero que haja uma solução de plataforma cruzada, mas eu gostaria de ter algum mínimo de programas em C/scripts que meu aplicativo pode gerar para informar o SO para ficar acordado.

Qualquer idéias?

Foi útil?

Solução

Eu uso este código para manter minha estação de trabalho de fecho.É atualmente só é definida para mover o mouse, uma vez a cada minuto, você pode facilmente ajustar a isso.

É um hack, não é uma solução elegante.

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

Outras dicas

Eu já ouvi histórias de pessoas recebendo um grande sub-woofer, em seguida, duto gravando uma tampa de caixa para o topo.Em seguida, você pode colocar o mouse na caixa e transformar a música.De preferência algo com muito bass que vai manter o mouse se mover.

No Windows, use o SystemParametersInfo função.É um exército Suíço-função de estilo que permite que você obter e definir todos os tipos de configurações do sistema.

Para desativar a tela de desligar, por exemplo:

SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );

Apenas certifique-se de configurá-lo de volta quando você está feito...

Eu tenho um técnica de força bruta de mover o mouse 1 ponto na direção x e, em seguida, de volta a cada 3 minutos.

Pode me uma solução mais elegante, mas é uma solução rápida.

Adicionar a scarcher2 do trecho de código acima e mover o rato por apenas 1 pixel.Eu movi o mouse duas vezes para que alguma mudança ocorre mesmo se o ponteiro está no extremos:

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

Não todas as sugestões mover o mouse para trás e para a frente de unidade o usuário louco?Eu sei que eu gostaria de remover qualquer aplicativo que faria que assim como eu, pode isolá-lo.

Não seria mais fácil para desativar o gerenciamento de energia no servidor?Poderá argumentar-se que os servidores não deve ir para o modo de economia de energia?

Estou usando pmset para controlar o modo de suspensão no meu Mac por algum tempo agora, e é muito fácil de integrar.Aqui está um exemplo grosseiro de como você pode chamar o programa de Java para activar/desactivar o modo de suspensão.Note que você precisa de privilégios de root para executar pmset, e, portanto, você vai precisar deles para executar este programa.

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

Você pode usar o programa de Cafeína caffiene para manter sua estação de trabalho acordado.Você pode executar o programa através do comando abrir no os X.

No Visual Studio criar um formulário simples.A partir da barra de ferramentas, arraste um controlo de Temporizador para o formulário.O código de Inicialização, definir o temporizador de intervalo de 60 segundos (60000 ms.).Implementar o temporizador de retorno de chamada com o código a seguir "SendKeys.Send("{F15}");" Executar o novo programa.

Nenhum movimento do mouse necessário.

Editar:Pelo menos no meu Exército de estação de trabalho, basta programaticamente gerando mouse e a tecla de mensagens não é o suficiente para manter minha estação de trabalho conectada e acordado.Os primeiros cartazes com o Java Robô de classe está no caminho certo.JAVA Robô funciona ou abaixo do sistema operacional do HAL (Camada de Abstração de Hardware) no Entanto eu recriado e testado Java/Robot solução e não funcionou, até que eu adicionei um Robô.keyPress(123) para o código.

Executar um comando dentro de um timer, como fazer um ping ao servidor..

Eu tinha acabado de fazer uma função (ou o download de um brinde app) que se move o mouse ao redor.Deselegante, mas fácil.

Este código se move o ponteiro para o mesmo local onde ele já é, portanto, o usuário não notará qualquer diferença.

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

No OS X, basta spawn caffeinate.Isso impedirá que o sistema de dormir até caffeinate é terminada.

Isso funcionará:

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

Aqui está concluída arquivo em Lotes que gera código java, compilá-lo, limpa os arquivos gerados, e é executado no plano de fundo..(jdk é necessária no seu portátil)

Basta executar este Arquivo 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"

Uma forma simples que eu uso para evitar a "área de trabalho do Windows Auto lock" é "ligar/Desligar o NumLock" a cada 6 segundos.

Aqui um Programa em Java para ligar/DESLIGAR o 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();
  }
}

Executar este programa em Java separadamente em um prompt de comando;:-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top