본문 바로가기
잡다구리

컴퓨터 자리 비움 방지용 - 자동 키보드 눌러주기

by 달남 2024. 7. 3.

마우스를 자동으로 이동해주는 것도 있지만
아래처럼 작성하면 돈을 안들여도 된다


윈도우에서 프로그램을 설치하지 않고도 키보드의 넘버 락 버튼을 1분마다 자동으로 누르는 스크립트를 작성하려면, 파워셸 스크립트를 사용할 수 있습니다. 파워셸은 윈도우에 기본적으로 설치되어 있는 강력한 스크립팅 언어입니다.

다음은 파워셸을 사용하여 넘버 락 버튼을 1분마다 누르는 스크립트를 작성하는 방법입니다:

### 파워셸 스크립트 (PowerShell Script)

1. **스크립트 작성**: 메모장을 열고 아래의 파워셸 스크립트를 입력합니다.

    ```powershell
    Add-Type -TypeDefinition @"
    using System;
    using System.Runtime.InteropServices;
    public class Keyboard {
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern short GetKeyState(int keyCode);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
        private const int KEYEVENTF_EXTENDEDKEY = 0x1;
        private const int KEYEVENTF_KEYUP = 0x2;
        private const int VK_NUMLOCK = 0x90;
        public static void ToggleNumLock() {
            bool numLockSet = (GetKeyState(VK_NUMLOCK) & 0x1) != 0;
            keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0);
            keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }
    }
    "@

    while ($true) {
        [Keyboard]::ToggleNumLock()
        Start-Sleep -Seconds 60
    }
    ```


위에 while 부분 수정-- 아침 8시부터 5시 반까지만 실행 되게

while ($true) {
    $currentHour = (Get-Date).Hour
    $currentMinute = (Get-Date).Minute
    if (($currentHour -gt 7 -or ($currentHour -eq 7 -and $currentMinute -ge 0)) -and ($currentHour -lt 17 -or ($currentHour -eq 17 -and $currentMinute -le 30))) {
        [Keyboard]::ToggleNumLock()
    }
    Start-Sleep -Seconds 60
}

2. **파일 저장**: 위 스크립트를 메모장에 입력한 후 `ToggleNumLock.ps1` 파일로 저장합니다.

3. **스크립트 실행**: 저장한 파워셸 스크립트를 실행합니다. 다음과 같은 명령어를 파워셸 창에 입력하여 실행합니다.

    ```powershell
    powershell -ExecutionPolicy Bypass -File "C:\path\to\your\ToggleNumLock.ps1"
    ```

    여기서 `"C:\path\to\your\ToggleNumLock.ps1"`은 저장한 스크립트 파일의 경로로 대체해야 합니다.

이 스크립트는 1분마다 넘버 락 키를 누르게 됩니다. `Start-Sleep -Seconds 60` 명령어로 1분(60초)마다 반복되도록 설정되어 있습니다.

### 참고 사항
- 파워셸 스크립트 실행 정책 때문에 스크립트 실행이 제한될 수 있습니다. 이 경우 `-ExecutionPolicy Bypass` 옵션을 사용하여 실행 정책을 일시적으로 무시할 수 있습니다.
- 이 스크립트는 단순히 넘버 락 상태를 토글하므로, 넘버 락이 꺼져 있을 때 스크립트를 실행하면 켜지고, 켜져 있을 때 실행하면 꺼지게 됩니다. 매번 상태가 변경된다는 점을 염두에 두세요.

이 방법으로 윈도우에서 별도의 프로그램 설치 없이 넘버 락 버튼을 자동으로 누르는 기능을 구현할 수 있습니다.




파워셸 스크립트를 쉽게 실행할 수 있도록 바로가기 링크를 만드는 방법은 다음과 같습니다:

### 1. 파워셸 스크립트 작성 및 저장
먼저, 이전에 작성한 파워셸 스크립트를 메모장에 입력하고 `ToggleNumLock.ps1` 파일로 저장합니다. 예를 들어, `C:\Scripts\ToggleNumLock.ps1`에 저장한다고 가정합니다.

### 2. 바로가기 링크 생성
이제 이 스크립트를 쉽게 실행할 수 있도록 바탕화면에 바로가기를 만듭니다.

1. **바로가기 만들기**:
    - 바탕화면에서 마우스 오른쪽 버튼을 클릭하고 "새로 만들기" > "바로 가기"를 선택합니다.
    - 바로가기 만들기 창이 열리면, 다음 명령어를 입력합니다:
        ```plaintext
        powershell -ExecutionPolicy Bypass -File "C:\Scripts\ToggleNumLock.ps1"
        ```
        여기서 `"C:\Scripts\ToggleNumLock.ps1"`은 스크립트 파일의 경로입니다.

2. **바로가기 이름 지정**:
    - 바로가기 이름을 지정합니다. 예를 들어, "Toggle Num Lock"이라고 할 수 있습니다.
    - "마침" 버튼을 클릭하여 바로가기를 만듭니다.

### 3. 바로가기 설정 변경 (선택 사항)
바로가기를 만들었으면, 스크립트가 관리자 권한으로 실행되도록 설정할 수 있습니다. 이는 키보드 이벤트가 제대로 작동하도록 보장합니다.

1. **바로가기 속성 열기**:
    - 바탕화면에 생성된 바로가기를 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택합니다.

2. **관리자 권한으로 실행 설정**:
    - "바로 가기" 탭에서 "고급" 버튼을 클릭합니다.
    - "관리자 권한으로 실행" 옵션을 체크하고 "확인"을 클릭합니다.

3. **적용 및 확인**:
    - "적용" 및 "확인"을 클릭하여 변경 사항을 저장합니다.

이제 바탕화면에 생성된 바로가기를 더블 클릭하면 파워셸 스크립트가 실행되어 1분마다 넘버 락 키를 자동으로 누르게 됩니다.


#같은 내용 다른 방식

# 넘버락 상태 확인 및 켜기 함수
function Set-NumLockState {
    $keybd_event = Add-Type -MemberDefinition @"
        [DllImport("user32.dll")]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
"@ -Name "Win32KeyboardInput" -Namespace Win32Functions -PassThru
    $keybd_event::keybd_event(0x90, 0, 0, [UIntPtr]::Zero)
}

# 60초마다 넘버락 키 누르기
while ($true) {
    Set-NumLockState
    Start-Sleep -Seconds 60
}



```powershell
# 넘버락 키를 눌러주는 함수
function Press-NumLock {
    Add-Type -AssemblyName System.Windows.Forms
    [System.Windows.Forms.SendKeys]::SendWait("{NUMLOCK}")
}

# 1시간마다 넘버락 키를 누르는 루프
while ($true) {
    Press-NumLock
    Start-Sleep -Seconds 3600 # 1시간 대기
}
```

위 코드를 파워셸에서 실행하면 1시간마다 넘버락 키가 눌러지게 됩니다. 스크립트를 중지하려면 파워셸 창을 닫으면 됩니다.

이 스크립트를 실행하기 전에 스크립트 실행 정책이 허용되어 있는지 확인하세요. 필요하다면 다음 명령어로 실행 정책을 변경할 수 있습니다:

```powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```






댓글