[java] Wie hältst du die Maschine wach?



Answers

Verwenden Sie unter Windows die Funktion SystemParametersInfo . Es ist eine Schweizer Armee-Stil-Funktion, mit der Sie alle möglichen Systemeinstellungen erhalten / einstellen können.

So deaktivieren Sie das Ausschalten des Bildschirms:

SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );

Stellen Sie sicher, dass Sie es zurücksetzen, wenn Sie fertig sind ...

Question

Ich habe eine in Java geschriebene Server-Software, die unter Windows und OS X läuft. (Sie läuft nicht auf einem Server, sondern nur auf einem normalen PC - so etwas wie ein Torrent-Client.) Ich möchte, dass die Software an das Betriebssystem, um die Maschine wach zu halten (verhindert, dass sie in den Schlafmodus geht), während sie aktiv ist.

Natürlich erwarte ich nicht, dass es eine plattformübergreifende Lösung gibt, aber ich würde gerne einige sehr minimale C-Programme / Skripte haben, die meine App erzeugen kann, um das OS zu informieren, wach zu bleiben.

Irgendwelche Ideen?




Würden nicht alle Vorschläge, die die Maus hin und her bewegen, den Benutzer verrückt machen? Ich weiß, dass ich jede App entfernen würde, die das tun würde, sobald ich es isolieren kann.




Ich benutze pmset , um Schlafmodus auf meinem Mac für eine Weile zu steuern, und es ist ziemlich einfach zu integrieren. Hier ist ein grobes Beispiel, wie Sie dieses Programm aus Java aufrufen können, um den Schlafmodus zu deaktivieren / aktivieren. Beachten Sie, dass Sie Root-Rechte benötigen, um pmset auszuführen, und daher benötigen Sie diese zum Ausführen dieses Programms.

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



Erstellen Sie in Visual Studio ein einfaches Formular. Ziehen Sie in der Symbolleiste ein Timer-Steuerelement in das Formular. Setzen Sie das Zeitintervall im Init-Code auf 60 Sekunden (60000 ms). Implementieren Sie den Timer-Rückruf mit dem folgenden Code "SendKeys.Send (" {F15} ");" Führen Sie das neue Programm aus.

Keine Mausbewegung erforderlich.

Bearbeiten: Zumindest auf meiner Army-Workstation reicht es nicht aus, programmgesteuert Maus- und Schlüsselmeldungen zu generieren, um meine Workstation eingeloggt und wach zu halten. Die frühen Poster mit der Java Robot-Klasse sind auf dem richtigen Weg. JAVA Robot arbeitet auf oder unter der HAL (Hardware Abstraction Layer) des Betriebssystems. Allerdings habe ich die Java / Robot-Lösung neu erstellt und getestet und es hat nicht funktioniert - bis ich Robot.keyPress (123) zum Code hinzugefügt habe.




caffeinate Sie unter OS X nur caffeinate . Dadurch wird das System daran caffeinate schlafen, bis das caffeinate beendet ist.




Hinzufügen zum Code-Snippet von scarcher2 oben und zum Bewegen der Maus um nur 1 Pixel. Ich habe die Maus zweimal bewegt, so dass einige Änderungen auftreten, selbst wenn der Zeiger auf Extremen steht:

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



Ich würde nur eine Funktion ausführen (oder eine Freebie-App herunterladen), die die Maus bewegt. Unelegant, aber leicht.




Related