문제

Windows 및 OS X에서 실행되도록 Java로 작성된 서버형 소프트웨어가 있습니다.(서버에서 실행되지 않고 일반 사용자의 PC에서 실행됩니다. 토렌트 클라이언트와 같습니다.) 소프트웨어가 OS에 신호를 보내 컴퓨터가 켜져 있는 동안 컴퓨터를 깨워 유지(절전 모드로 전환되는 것을 방지)하고 싶습니다. 활동적인.

물론 크로스 플랫폼 솔루션이 있을 것이라고는 기대하지 않지만, OS에 깨어 있음을 알리기 위해 내 앱이 생성할 수 있는 아주 최소한의 C 프로그램/스크립트가 있으면 좋겠습니다.

어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

나는 이 코드를 사용하여 워크스테이션이 잠기지 않도록 합니다.현재는 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픽셀씩만 이동합니다.포인터가 극단적인 경우에도 일부 변경이 발생하도록 마우스를 두 번 움직였습니다.

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

마우스를 앞뒤로 움직이는 모든 제안이 사용자를 미치게 만들지 않을까요?나는 그것을 격리할 수 있는 즉시 이를 수행하는 모든 앱을 제거할 것이라는 것을 알고 있습니다.

서버에서 전원 관리를 비활성화하는 것이 더 쉽지 않습니까?서버가 절전 모드로 전환되어서는 안 된다는 주장이 있을 수 있습니까?

나는 사용해왔다 pmset 한동안 Mac에서 절전 모드를 제어할 수 있었는데 통합하기가 매우 쉽습니다.다음은 Java에서 해당 프로그램을 호출하여 절전 모드를 비활성화/활성화하는 방법에 대한 대략적인 예입니다.pmset을 실행하려면 루트 권한이 필요하므로 이 프로그램을 실행하려면 루트 권한이 필요합니다.

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에서 간단한 양식을 만듭니다.도구 모음에서 Timer 컨트롤을 폼으로 끌어옵니다.초기화 코드에서 타이머 간격을 60초(60000ms)로 설정합니다.다음 코드 "SendKeys.Send ("{f15} ")로 타이머 콜백을 구현하십시오." 새로운 프로그램을 실행하십시오.

마우스 움직임이 필요하지 않습니다.

편집하다:적어도 내 육군 워크스테이션에서는 단순히 프로그래밍 방식으로 마우스와 키 메시지를 생성하는 것만으로는 워크스테이션을 로그인하고 깨어 있는 상태로 유지하는 데 충분하지 않습니다.Java Robot 클래스가 포함된 초기 포스터는 올바른 방향으로 가고 있습니다.JAVA Robot은 OS의 HAL(하드웨어 추상화 계층) 또는 그 이하에서 작동합니다. 그러나 Java/Robot 솔루션을 다시 만들고 테스트했지만 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 데스크탑 자동 잠금"을 방지하기 위해 사용하는 간단한 방법 중 하나는 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 프로그램을 실행하십시오.:-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top