scrollLockPusher - mouseJiggler 대용 화면보호방지기(POWERSHELL)

2022. 10. 18. 15:04재활용용

scrollLockPusher - mouseJiggler 대용 화면보호방지기(POWERSHELL)

검색 동기

이전 근무지에는 mouseJiggler같은 화면보호기를 방지하는 프로그램이 있었다.

원리는 마우스를 살짝살짝 움직여줘서 화면보호기 뜨기까지의 시간을 계속 초기화해주는 것이다.

mouseJiggler는 인터넷에서 쉽게 구할 수 있었으나, 안타깝게도 지금의 업무환경은 인터넷 접속이 제한되고, 파일이동이 어렵기 때문에 프로그램을 대신할수 있는 스크립트를 찾게 되었다.

검색 과정

나와같은 생각을 하는 사람이 많았고, 스크립트는 널려있었기에 제작과정이 아닌 검색 과정이다.

powershell은 window10 이면 기본적으로 구비되어있기에 powershell script를 찾게 되었다.

처음에는 비슷하게 커서의 위치를 1px 씩 위아래로 이동하는 스크립트를 찾아냈다.

하지만 커서의 움직임을 화면보호기와 메신저에서 감지 하지 못했다(일정시간 지나면 메신저에 부재중이 뜬다)

그래서 다시 찾게된 스크립트는 scroll lock key를 눌러주는 스크립트다.

코드

"""

$sleep = 2 # scroll lock 입력 주기(초)
$line = 60 # 한줄에 표시되는 점 

$sw = [System.Diagnostics.Stopwatch]::StartNew()
$ws = New-Object -com "Wscript.Shell"

while ($true) {
    # toggle scroll lock
    $ws.sendkeys("{SCROLLLOCK}")
    Start-Sleep -Milliseconds 100
    $ws.sendkeys("{SCROLLLOCK}")
    Start-Sleep -Seconds $sleep

    # print dot
    write-host '.' -NoNewline
    $Count++
    # new line if dot count reached line count
    if ( -not ( $count % $line )) {
        write-host
    }

    Start-Sleep $sleep

    # conditionial exit when key pressed
    if ( [Console]::KeyAvailable ){
        $keypress = [Console]::ReadKey($true) # clear the key press
        Write-Host
        $sw.stop()
        Write-Host "Elapsed $([int]$sw.Elapsed.TotalSeconds) seconds"
        break
    }
}

"""

복붙이 안되어 이거 하나하나 다치고, 파일이름.ps1 으로 저장했다.

실행은 powershell 실행후 해당 폴더 위치에서 .\파일이름.ps1 해주면 된다

tab space는 2로 했는데 잘된다. 4는 잘 모르겠다.

켜놓고 있다가 필요할때 키보드 키를 누르면 시작부터 키 누르기 까지의 시간을 보여주고 중지한다.

추가

일단 목적자체는 달성했다.

실행하는 것도 귀찮아서 task scheduler로 자동실행 걸려고 이벤트 등록하려 애를 썼지만, 당장은 이벤트가 제대로 실행되지 않는다.

실행중에는 중간중간 scroll lock이 눌리기 때문에 타이핑이 불편하다는 단점이 있다. 메신저 사용시 체감된다.

scrollLockPusher 라는 창의성 없는 이름을 지었지만 투박한 이름에 걸맞게 별 문제없이 기능한다.