Como você mantém a máquina está acordado?
-
09-06-2019 - |
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?
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;:-)