ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 점심시간 자동 화면 잠금
    Spring/mini Project 2023. 12. 26. 10:59
    728x90
    반응형

    - 만든 이유

    시간을 안보고 일하다 보면 점심시간인지 모르는 경우가 있기 때문이다.

    • 이걸 모든 직원컴퓨터에서 실행하여 점심시간이 되면 다들 빨리 일어났으면 좋겠다.

    - 최종적으로 만들고자 하는 결과물

    컴퓨터 부팅시 자동으로 실행되게 하여 점심시간에 화면이 잠겼으면 좋겠다.

    • 아직 부팅시 자동 실행은 만들지 못하였다. [2023-12-26]

    소스코드

    package com.lunch.breakPoint;
    
    import java.io.IOException;
    import java.time.LocalDateTime;
    import java.util.Timer;
    import java.util.TimerTask;
    
    /***
     * 점시시간 11:45에 화면 잠금을 하는 프로그램
     * @author user
     *
     */
    public class LunchBreakPoint {
    
    	public static void main(String[] args) {
    
    		Timer timer = new Timer();
    		RunClass runClass = new RunClass(timer);
    		
    		timer.schedule(runClass, 0, 1000 * 60);
    	}
    }
    
    class RunClass extends TimerTask {
    
    	private Timer timer;
    	
    	RunClass(Timer timer){
    		this.timer = timer;
    	}
    	
    	@Override
    	public void run() {
    		exec();
    	}
    
    	public void exec() {
    		try {
    			LocalDateTime now = LocalDateTime.now();
    //			if(now.getHour() == 13 && now.getMinute() == 6){
    //				cancel();
    //			}
    			
    			if(now.getHour() == 13 && now.getMinute() == 17){
    				/*Process process = */Runtime.getRuntime().exec("rundll32.exe user32.dll,LockWorkStation");
    //				process.waitFor();
    				timer.cancel(); // 타이머 종료
    				System.exit(0); // 시스템 종료
    			}
    			
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    }

    rundll32.exe

    Windows 운영체제에서 DLL(Dynamic Link Library)파일을 실행하는데 사용되는 유틸리티이다.

    user32.dll

    Windows 사용자 인터페이스 및 그래픽 관련 함수를 제공하는 DLL 파일이다.

    LockWorkStation

    작업세션을 잠그는데 사용되는 명령어이다.

    소스코드 작성 이후 작업

    1. mvn clean install 한 후 생성된 jar파일을 powerShell을 이용하여 백그라운드 실행한다.

    Start-Process -FilePath "java" -ArgumentList "-jar", "경로/JARNAME.jar" -WindowStyle Hidden

    2. 실행한 jar파일이 잘 작동하는지 확인

    Get-Process -Name "java"
    # 없는 경우 오류가 나기 때문에 아래와 같이 만들어 줄 수 있다.
    
    try{
    	$searchProcess = Get-Process -Name "java"
        
        $searchProcess
    } catch {
    	Write-OutPut "Not Found Java File"
    }

    3. 해당 jar파일을 종료하고 싶은 경우

    kill -id id값

    4. bat 파일을 만들고 싶은 경우

    프로젝트 루트 디렉토리에 Name.bat 파일을 만들어주고 아래와 같은 명령어를 넣어주면 된다.

    @echo off
    start javaw -jar 경로\lunchBreak-0.0.1-SNAPSHOT.jar

    javaw는 콘솔 창 없이 Java 애플리케이션을 실행하는 명령어이다.

    이렇게 하면 PowerShell에서 Get-Process -Name "java"로는 해당 프로세스를 찾을 수 없다.

    찾고 싶다면 tasklist 명령어를 통해 javaw.exe가 있는지 확인해야한다.

     

    728x90
    반응형
Designed by Tistory.