# 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