マシンを起動したままにするにはどうすればよいですか?
-
09-06-2019 - |
質問
Windows と OS X 上で実行できる Java で書かれたサーバー風のソフトウェアを持っています。(サーバー上では実行されていません。トレント クライアントのような通常のユーザーの PC 上で実行されています。) ソフトウェアがマシンを起動したままにする (スリープ モードにならないようにする) ように OS に信号を送りたいと考えています。アクティブ。
もちろん、クロスプラットフォームのソリューションがあるとは期待していませんが、アプリが起動して OS が起動したままになるように通知できる、非常に最小限の C プログラム/スクリプトがいくつかあればいいと思っています。
何か案は?
解決
このコードを使用して、ワークステーションがロックされないようにします。現在、マウスを 1 分に 1 回動かすように設定されていますが、簡単に調整できます。
これはハックであり、エレガントな解決策ではありません。
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);
}
}
}
他のヒント
大きなサブウーファーを手に入れて、その上に箱の蓋をダクトテープで貼り付けた人の話を聞いたことがあります。次に、マウスを箱の中に入れて、音楽を大きくします。できれば、マウスを動かし続ける低音がたくさんあるものが望ましいです。
Windows では、 システムパラメータ情報 関数。これは、あらゆる種類のシステム設定を取得/設定できるスイス軍スタイルの機能です。
たとえば、画面のオフを無効にするには:
SystemParametersInfo( SPI_SETPOWEROFFACTIVE, 0, NULL, 0 );
終わったら必ず元に戻してください...
私はマウスを x 方向に 1 ポイント動かし、3 分ごとに戻すという非常に強引なテクニックを使用しています。
もっと洗練された解決策があるかもしれませんが、それは簡単な修正です。
上記のscarcher2のコードスニペットに追加し、マウスを1ピクセルだけ移動させます。ポインタが極端にある場合でも何らかの変化が起こるように、マウスを 2 回移動しました。
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);
}
マウスを前後に動かすと、ユーザーは気が狂ってしまうのではないでしょうか?隔離できたら、そのような行為をするアプリはすぐに削除するつもりです。
サーバーの電源管理を無効にする方が簡単ではないでしょうか?サーバーは省電力モードにすべきではないと主張する人もいるかもしれません。
私は使ってきました 午後セット しばらくの間、Mac のスリープ モードを制御するために使用しましたが、統合するのは非常に簡単です。以下は、Java からそのプログラムを呼び出してスリープ モードを無効/有効にする方法の大まかな例です。pmset を実行するには root 権限が必要なので、このプログラムを実行するには root 権限が必要であることに注意してください。
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;
}
}
カフェインプログラムを使用できます カフェイン ワークステーションを起動したままにします。OS X では open コマンドを使用してプログラムを実行できます。
Visual Studio で単純なフォームを作成します。ツールバーから、タイマー コントロールをフォームにドラッグします。Init コードで、タイマー間隔を 60 秒 (60000 ミリ秒) に設定します。次のコード「sendkeys.send( "{f15}"); "でタイマーコールバックを実装します。新しいプログラムを実行します。
マウスの移動は必要ありません。
編集:少なくとも私の陸軍ワークステーションでは、単にプログラムでマウスとキーのメッセージを生成するだけでは、ワークステーションをログインした状態で起動し続けるのに十分ではありません。Java Robot クラスを使用した初期のポスターは正しい軌道に乗っています。JAVA ロボットは OS の HAL (ハードウェア抽象化レイヤー) 上またはその下で動作しますが、Java/ロボット ソリューションを再作成してテストしましたが、コードに Robot.keyPress(123) を追加するまで動作しませんでした。
サーバーに ping を送信するなど、タイマー内でコマンドを実行します。
私なら、マウスを動かす機能を実行する (または景品アプリをダウンロードする) だけです。エレガントではありませんが、簡単です。
このコードは、ユーザーが違いに気付かないように、ポインターを既に存在しているのと同じ場所に移動します。
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);
}
OS X では、スポーンするだけです caffeinate
. 。これにより、システムは次の時間までスリープ状態にならずに済みます。 caffeinate
終了されます。
これは機能します:
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);
}
}
}
これは、Java コードを生成し、コンパイルし、生成されたファイルをクリーンアップして、バックグラウンドで実行するバッチ ファイルの完成です。(ラップトップでは jdk が必要です)
この 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"
「Windows デスクトップの自動ロック」を回避するために私が使用している簡単な方法の 1 つは、6 秒ごとに「NumLock のオン/オフを切り替える」です。
NumLockのON/OFFを切り替えるJavaプログラムです。
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();
}
}
この Java プログラムを別のコマンド プロンプトで実行します。:-)