IT

파워셸에서 특정 키 입력을 감지하고 시스템에 입력 예제

달남 2024. 7. 4. 15:28




파워셸에서 특정 키 입력을 감지하고 시스템에 입력을 시뮬레이션하기 위해서는, Windows API를 활용하여 키보드 입력을 시뮬레이션해야 합니다. 이는 `SendInput` 함수를 사용하여 가능합니다. 다음은 파워셸 스크립트를 사용하여 Ctrl + W를 감지하고 'a' 키를 시스템에 입력하는 예제입니다:

```powershell
Add-Type @"
using System;
using System.Runtime.InteropServices;

public class KeyboardListener {
    [DllImport("user32.dll")]
    public static extern short GetAsyncKeyState(int vKey);

    [DllImport("user32.dll")]
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
    
    public const int VK_CONTROL = 0x11;
    public const int VK_W = 0x57;
    public const int VK_A = 0x41;
    public const uint KEYEVENTF_KEYUP = 0x0002;

    public static bool IsCtrlWPressed() {
        return (GetAsyncKeyState(VK_CONTROL) & 0x8000) != 0 && (GetAsyncKeyState(VK_W) & 0x8000) != 0;
    }

    public static void SimulateKeyPress(byte key) {
        keybd_event(key, 0, 0, UIntPtr.Zero); // Key down
        keybd_event(key, 0, KEYEVENTF_KEYUP, UIntPtr.Zero); // Key up
    }
}
"@

Write-Host "Ctrl + W를 누르면 'a'가 입력됩니다."

while ($true) {
    if ([KeyboardListener]::IsCtrlWPressed()) {
        [KeyboardListener]::SimulateKeyPress([KeyboardListener]::VK_A)
        Start-Sleep -Milliseconds 500
    }
}
```

이 스크립트는 다음과 같은 방식으로 동작합니다:
1. `GetAsyncKeyState`를 사용하여 Ctrl + W 키 입력을 감지합니다.
2. 감지되면 `keybd_event`를 사용하여 'a' 키 입력을 시뮬레이션합니다.

스크립트를 실행하면 Ctrl + W를 누를 때마다 시스템에 'a'가 입력됩니다. 이 스크립트는 관리자 권한으로 실행해야 할 수도 있습니다.