스크립트

# f24
Add-Type -TypeDefinition @"
    using System;
    using System.Runtime.InteropServices;

    public class UserActivityMonitor {
        [DllImport("user32.dll")]
        public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        public struct LASTINPUTINFO {
            public uint cbSize;
            public int dwTime;
        }

        public static int GetIdleTime() {
            LASTINPUTINFO lii = new LASTINPUTINFO();
            lii.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(LASTINPUTINFO));
            GetLastInputInfo(ref lii);
            return Environment.TickCount - lii.dwTime;
        }
    }

    public class KeyboardSimulator {
        [DllImport("user32.dll", SetLastError = true)]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

        private const byte VK_F24 = 0x87;
        private const uint KEYEVENTF_KEYUP = 0x2;

        public static void PressF24() {
            keybd_event(VK_F24, 0, 0, 0);
            System.Threading.Thread.Sleep(50);
            keybd_event(VK_F24, 0, KEYEVENTF_KEYUP, 0);
        }
    }

"@ -Language CSharp

# 타임아웃 설정 (1시간)
$timeoutSeconds = 3600
$startTime = Get-Date
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$WShell = New-Object -com "Wscript.Shell"

while ($true) {
    $idleTime = [UserActivityMonitor]::GetIdleTime() / 1000  # 초 단위 변환

    if ($idleTime -ge $timeoutSeconds) {
        Write-Host "사용자 입력 없음: $timeoutSeconds 초 경과 - 스크립트 종료"
		pause
        break
    }

    [KeyboardSimulator]::PressF24()
    Write-Host "F24 is pressed."

    Write-Host "$timestamp wake up!"

    # 180초 대기
    Start-Sleep -Seconds 180
}


# 스크롤 락
Add-Type -TypeDefinition @"
    using System;
    using System.Runtime.InteropServices;

    public class UserActivityMonitor {
        [DllImport("user32.dll")]
        public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        public struct LASTINPUTINFO {
            public uint cbSize;
            public int dwTime;
        }

        public static int GetIdleTime() {
            LASTINPUTINFO lii = new LASTINPUTINFO();
            lii.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(LASTINPUTINFO));
            GetLastInputInfo(ref lii);
            return Environment.TickCount - lii.dwTime;
        }
    }

"@ -Language CSharp

# 타임아웃 설정 (1시간)
$timeoutSeconds = 3600
$startTime = Get-Date
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$WShell = New-Object -com "Wscript.Shell"

while ($true) {
    $idleTime = [UserActivityMonitor]::GetIdleTime() / 1000  # 초 단위 변환

    if ($idleTime -ge $timeoutSeconds) {
        Write-Host "사용자 입력 없음: $timeoutSeconds 초 경과 - 스크립트 종료"
		pause
        break
    }

    $WShell.sendkeys("{SCROLLLOCK}")
    Start-Sleep -Milliseconds 100
    $WShell.sendkeys("{SCROLLLOCK}")

    Write-Host "$timestamp wake up!"

    # 180초 대기
    Start-Sleep -Seconds 180
}



# 백그라운드 실행
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -File C:\Users\Doha\OneDrive\Desktop\wakeup.ps1" -WindowStyle Hidden