Domanda

Ho un software server-ish scritto in Java per funzionare su Windows e OS X.(Non è in esecuzione su un server, ma solo sul normale PC di un utente, qualcosa come un client torrent.) Vorrei che il software segnalasse al sistema operativo di mantenere la macchina sveglia (impedire che entri in modalità di sospensione) mentre è attivo.

Ovviamente non mi aspetto che ci sia una soluzione multipiattaforma, ma mi piacerebbe avere alcuni programmi/script C minimi che la mia app può generare per informare il sistema operativo di rimanere sveglio.

Qualche idea?

È stato utile?

Soluzione

Utilizzo questo codice per impedire il blocco della mia workstation.Attualmente è impostato per spostare il mouse solo una volta al minuto, ma puoi facilmente regolarlo.

È un trucco, non una soluzione 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);
        }
    }
}

Altri suggerimenti

Ho sentito storie di persone che acquistano un grande subwoofer e poi fissano con nastro adesivo il coperchio di una scatola verso l'alto.Puoi quindi mettere il mouse nella scatola e alzare il volume della musica.Preferibilmente qualcosa con molti bassi che mantenga il mouse in movimento.

Su Windows, utilizzare il file Informazioni sui parametri di sistema funzione.È una funzione in stile esercito svizzero che ti consente di ottenere/impostare tutti i tipi di impostazioni di sistema.

Per disattivare lo spegnimento dello schermo, ad esempio:

SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );

Assicurati solo di reimpostarlo quando hai finito...

Ho una tecnica molto brutale per spostare il mouse di 1 punto nella direzione x e poi indietro ogni 3 minuti.

Potrebbe esserci una soluzione più elegante, ma è una soluzione rapida.

Aggiunta allo snippet di codice di scarcher2 sopra e spostamento del mouse di solo 1 pixel.Ho spostato il mouse due volte in modo che si verifichi qualche cambiamento anche se il puntatore si trova agli estremi:

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

Tutti i suggerimenti che muovono il mouse avanti e indietro non farebbero impazzire l'utente?So che rimuoverei qualsiasi app che lo farebbe non appena riesco a isolarla.

Non sarebbe più semplice disabilitare la gestione dell'alimentazione sul server?Si potrebbe sostenere che i server non dovrebbero entrare in modalità di risparmio energetico?

Sto usando pmset per controllare la modalità di sospensione sul mio Mac ormai da un po', ed è abbastanza facile da integrare.Ecco un esempio approssimativo di come potresti chiamare quel programma da Java per disabilitare/abilitare la modalità di sospensione.Tieni presente che hai bisogno dei privilegi di root per eseguire pmset e quindi ne avrai bisogno per eseguire questo programma.

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

Puoi utilizzare il programma Caffeina caffeina per mantenere attiva la tua postazione di lavoro.È possibile eseguire il programma tramite il comando open in OS X.

In Visual Studio crea un modulo semplice.Dalla barra degli strumenti, trascina un controllo Timer sul modulo.Nel codice Init, impostare l'intervallo del timer su 60 secondi (60000 ms.).Implementa il callback timer con il seguente codice "SendKeys.send (" {f15} ");" Esegui il nuovo programma.

Non è necessario alcun movimento del mouse.

Modificare:Almeno sulla mia workstation militare, la semplice generazione programmatica di mouse e messaggi chiave non è sufficiente per mantenere la mia workstation attiva e attiva.I primi poster con la classe Java Robot sono sulla strada giusta.JAVA Robot funziona sopra o sotto l'HAL (Hardware Abstraction Layer) del sistema operativo. Tuttavia ho ricreato e testato la soluzione Java/Robot e non ha funzionato, finché non ho aggiunto Robot.keyPress(123) al codice.

Esegui un comando all'interno di un timer come eseguire il ping del server..

Farei semplicemente una funzione (o scaricherei un'app gratuita) che sposta il mouse.Inelegante, ma facile.

Questo codice sposta il puntatore nella stessa posizione in cui si trova già in modo che l'utente non noti alcuna differenza.

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

Su OS X, basta spawnare caffeinate.Ciò impedirà al sistema di dormire fino a quando caffeinate è terminato.

Funzionerà:

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

Ecco il file batch completato che genera codice Java, lo compila, pulisce i file generati e viene eseguito in background..(jdk è richiesto sul tuo laptop)

Basta eseguire questo file 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"

Un modo semplice che utilizzo per evitare il "Blocco automatico del desktop Windows" è "Attiva/disattiva NumLock" ogni 6 secondi.

Ecco un programma Java per attivare/disattivare 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();
  }
}

Esegui questo programma Java in un prompt dei comandi separato;:-)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top