오늘의하루

[Java] 점심시간 자동 화면 잠금 본문

Spring/mini Project

[Java] 점심시간 자동 화면 잠금

오늘의하루_master 2023. 12. 26. 10:59

- 만든 이유

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

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

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

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

  • 아직 부팅시 자동 실행은 만들지 못하였다. [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가 있는지 확인해야한다.

 

Comments