Frage

Ich habe eine serverartige Software, die in Java geschrieben ist und unter Windows und OS X läuft.(Es läuft nicht auf einem Server, sondern nur auf dem PC eines normalen Benutzers – so etwas wie ein Torrent-Client.) Ich möchte, dass die Software dem Betriebssystem signalisiert, die Maschine währenddessen wach zu halten (zu verhindern, dass sie in den Ruhemodus wechselt). aktiv.

Natürlich erwarte ich keine plattformübergreifende Lösung, aber ich hätte gerne ein paar sehr minimale C-Programme/Skripte, die meine App erzeugen kann, um das Betriebssystem anzuweisen, wach zu bleiben.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich verwende diesen Code, um zu verhindern, dass meine Workstation blockiert.Derzeit ist es nur so eingestellt, dass die Maus einmal pro Minute bewegt wird. Sie können dies jedoch problemlos anpassen.

Es ist ein Hack, keine elegante Lösung.

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

Andere Tipps

Ich habe Geschichten von Leuten gehört, die sich einen großen Subwoofer besorgt haben und dann einen Kastendeckel mit Klebeband an der Oberseite befestigt haben.Anschließend können Sie die Maus in die Box stecken und die Musik lauter aufdrehen.Am besten etwas mit viel Bass, das die Maus in Bewegung hält.

Verwenden Sie unter Windows die SystemParametersInfo Funktion.Es handelt sich um eine Funktion im Stil der Schweizer Armee, mit der Sie alle möglichen Systemeinstellungen abrufen/einstellen können.

Um die Bildschirmabschaltung zu deaktivieren, gehen Sie beispielsweise wie folgt vor:

SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );

Stellen Sie es einfach wieder zurück, wenn Sie fertig sind ...

Ich verwende eine sehr brutale Technik, bei der ich die Maus alle 3 Minuten um einen Punkt in die x-Richtung und dann zurück bewege.

Für mich gibt es vielleicht eine elegantere Lösung, aber es ist eine schnelle Lösung.

Zum obigen Codeausschnitt von scarcher2 hinzufügen und die Maus nur um 1 Pixel bewegen.Ich habe die Maus zweimal bewegt, sodass einige Änderungen auftreten, selbst wenn der Zeiger an den Extrempunkten 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);
        }

Würden all die Vorschläge, die Maus hin und her zu bewegen, den Benutzer nicht in den Wahnsinn treiben?Ich weiß, dass ich jede App, die das tun würde, entfernen würde, sobald ich sie isolieren kann.

Wäre es nicht einfacher, die Energieverwaltung auf dem Server zu deaktivieren?Man könnte argumentieren, dass Server nicht in den Energiesparmodus wechseln sollten?

Ich habe verwendet pmset Ich steuere schon seit einiger Zeit den Schlafmodus auf meinem Mac und es ist ziemlich einfach zu integrieren.Hier ist ein grobes Beispiel dafür, wie Sie dieses Programm von Java aus aufrufen können, um den Schlafmodus zu deaktivieren/aktivieren.Beachten Sie, dass Sie zum Ausführen von pmset Root-Rechte benötigen und diese daher auch zum Ausführen dieses Programms benötigen.

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

Sie können das Programm Koffein verwenden Kaffee um Ihren Arbeitsplatz wach zu halten.Sie können das Programm über den Befehl „open“ in OS X ausführen.

Erstellen Sie in Visual Studio ein einfaches Formular.Ziehen Sie aus der Symbolleiste ein Timer-Steuerelement auf das Formular.Stellen Sie im Init-Code das Timer-Intervall auf 60 Sekunden (60000 ms) ein.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, einfach programmgesteuert Maus- und Tastenmeldungen zu generieren, um meine Workstation angemeldet und wach zu halten.Die frühen Poster mit der Java Robot-Klasse sind auf dem richtigen Weg.JAVA Robot funktioniert auf oder unterhalb der HAL (Hardware Abstraction Layer) des Betriebssystems. Ich habe jedoch die Java/Robot-Lösung neu erstellt und getestet und sie hat nicht funktioniert – bis ich dem Code Robot.keyPress(123) hinzugefügt habe.

Führen Sie einen Befehl innerhalb eines Timers aus, z. B. indem Sie den Server anpingen.

Ich würde einfach eine Funktion ausführen (oder eine kostenlose App herunterladen), die die Maus bewegt.Unelegant, aber einfach.

Dieser Code verschiebt den Zeiger an die gleiche Stelle, an der er sich bereits befindet, sodass der Benutzer keinen Unterschied bemerkt.

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

Unter OS X einfach spawnen caffeinate.Dadurch wird verhindert, dass das System bis dahin in den Ruhezustand wechselt caffeinate wird beendet.

Das wird funktionieren:

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

Hier ist die fertige Batch-Datei, die Java-Code generiert, kompiliert, die generierten Dateien bereinigt und im Hintergrund läuft.(JDK ist auf Ihrem Laptop erforderlich)

Führen Sie einfach diese Bat-Datei aus ;)

@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"

Eine einfache Möglichkeit, die ich verwende, um die automatische Sperre des Windows-Desktops zu vermeiden, ist „NumLock alle 6 Sekunden ein-/ausschalten“.

Hier ein Java-Programm zum Ein-/Ausschalten von 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();
  }
}

Führen Sie dieses Java-Programm in einer separaten Eingabeaufforderung aus;:-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top