Windows 운영 체제에서 특정 작업을 자동화하기 위한 방법 중 하나는 마우스 클릭을 프로그램적으로 제어하는 것입니다. PowerShell 스크립트를 사용하면 지정된 화면 좌표로 마우스를 이동시키고 클릭하는 작업을 쉽게 자동화할 수 있습니다. 이 문서는 PowerShell 스크립트를 통해 이러한 기능을 구현하고 활용하는 방법을 안내합니다.
스크립트 기능 개요
이 스크립트는 Windows의 기본 라이브러리를 활용하여 마우스 커서를 지정된 화면 좌표로 이동시킨 후 좌클릭을 수행하는 기능을 제공합니다. 이를 통해 반복적인 수동 클릭 작업이나 간단한 GUI 상호작용을 자동화할 수 있습니다.
사전 준비
- Windows 운영 체제가 설치된 PC
- 마우스 자동 클릭 스크립트 파일 (예:
auto-click-manager.ps1) - 클릭할 위치의 화면 좌표를 확인하는 도구 (예: Windows 기본 제공 캡처 도구 또는 Snipaste)
PowerShell 콘솔 실행
스크립트를 실행하려면 PowerShell 콘솔을 열어야 합니다.
Windows 키 + X를 눌러 빠른 실행 메뉴를 엽니다.- 메뉴에서
Windows PowerShell또는Windows PowerShell (관리자)를 선택하여 콘솔을 실행합니다.
스크립트 경로 설정
다운로드한 스크립트 파일이 있는 디렉터리로 PowerShell 콘솔의 경로를 변경해야 합니다.
- 스크립트 파일이 저장된 폴더의 경로를 복사합니다 (예:
C:\Users\YourUser\Documents\Automouse). - PowerShell 콘솔에서 다음 명령어를 실행하여 해당 경로로 이동합니다:
cd "C:\Users\YourUser\Documents\Automouse"
필수 라이브러리 확인
이 스크립트는 System.Windows.Forms 라이브러리에 의존합니다. 다음 스크립트를 사용하여 시스템에 라이브러리가 제대로 로드되는지 확인할 수 있습니다.
check-forms-availability.ps1:
# 시스템 Windows Forms 라이브러리 가용성 확인 스크립트
try {
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("System.Windows.Forms 모듈이 성공적으로 로드되었습니다.")
} catch {
Write-Error "System.Windows.Forms 모듈을 로드할 수 없습니다. 시스템 환경을 확인하세요."
}
PowerShell 콘솔에서 .\check-forms-availability.ps1을 실행했을 때, 'System.Windows.Forms 모듈이 성공적으로 로드되었습니다.'라는 메시지 박스가 나타나면 정상적으로 작동할 준비가 된 것입니다.
스크립트 실행 정책 변경
만약 "이 시스템에서 스크립트를 실행할 수 없으므로..."와 같은 오류 메시지가 나타난다면, PowerShell의 실행 정책이 스크립트 실행을 제한하고 있기 때문입니다. 이 경우 다음 명령어를 사용하여 실행 정책을 변경할 수 있습니다:
Set-ExecutionPolicy RemoteSigned
프롬프트가 나타나면 Y를 입력하여 변경을 승인합니다. RemoteSigned 정책은 로컬에서 작성된 스크립트의 실행을 허용합니다.
예시: Steam 클라이언트 자동화
Steam 클라이언트에서 특정 게임을 순차적으로 클릭하여 정보를 확인하는 시나리오를 가정해 보겠습니다. 이 예시에서는 '게임 A', '게임 B', '게임 C'를 순서대로 클릭하는 작업을 자동화합니다.
클릭 좌표 식별
스크립트에 사용할 정확한 화면 좌표를 확인하는 것이 중요합니다. Windows에 내장된 캡처 도구 (Windows 키 + Shift + S)나 Snipaste 같은 외부 도구를 사용하여 마우스 커서 위치의 픽셀 좌표를 확인할 수 있습니다.
예를 들어, Steam 라이브러리에서 각 게임 항목의 중앙 좌표를 다음과 같이 식별했다고 가정합니다:
- '게임 A': (121, 248)
- '게임 B': (101, 426)
- '게임 C': (101, 101)
스크립트 수정 및 실행
이제 auto-click-manager.ps1 파일을 열어 클릭할 좌표와 대기 시간을 설정합니다.
auto-click-manager.ps1:
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class WinMouseOps {
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
public const uint MOUSEEVENTF_MOVED = 0x0001;
public const uint MOUSEEVENTF_LEFT_DOWN = 0x0002;
public const uint MOUSEEVENTF_LEFT_UP = 0x0004;
public const uint MOUSEEVENTF_RIGHT_DOWN = 0x0008;
public const uint MOUSEEVENTF_RIGHT_UP = 0x0010;
public const uint MOUSEEVENTF_ABS = 0x8000;
}
"@
function Perform-MouseClick ($coordX, $coordY) {
# 지정된 위치로 마우스 커서 이동
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($coordX, $coordY)
# 좌클릭 수행 (눌렀다가 떼기)
[WinMouseOps]::mouse_event([WinMouseOps]::MOUSEEVENTF_LEFT_DOWN, 0, 0, 0, 0)
Start-Sleep -Milliseconds 50
[WinMouseOps]::mouse_event([WinMouseOps]::MOUSEEVENTF_LEFT_UP, 0, 0, 0, 0)
}
# 클릭할 위치와 각 클릭 사이의 대기 시간 목록 정의
$operationPoints = @(
@{ X = 121; Y = 248; DelaySec = 5 }, # '게임 A' 클릭 후 5초 대기
@{ X = 101; Y = 426; DelaySec = 10 }, # '게임 B' 클릭 후 10초 대기
@{ X = 101; Y = 101; DelaySec = 1 }, # '게임 C' 클릭 후 1초 대기 (테스트 목적)
@{ X = 122; Y = 741; DelaySec = 10 } # 추가 예시
)
# 전체 반복 횟수 설정
$executionCycles = 1
for ($cycle = 0; $cycle -lt $executionCycles; $cycle++) {
foreach ($pointData in $operationPoints) {
Write-Host "좌표 ($($pointData.X), $($pointData.Y)) 클릭 중 - 현재 $(\$cycle + 1)회 / 총 $($executionCycles)회"
Perform-MouseClick -coordX $pointData.X -coordY $pointData.Y
Start-Sleep -Seconds $pointData.DelaySec
}
}
스크립트 파일 저장 후, PowerShell 콘솔에서 다음 명령어를 실행합니다:
.\auto-click-manager.ps1
콘솔에 클릭 진행 상황이 출력되며, 설정된 좌표에 따라 마우스 클릭 작업이 자동으로 수행됩니다.
스크립트 추가 설정
auto-click-manager.ps1 파일 내의 $operationPoints 배열을 수정하여 클릭할 좌표와 각 클릭 후 대기할 시간을 자유롭게 설정할 수 있습니다. 또한 $executionCycles 변수를 조정하여 전체 클릭 시퀀스를 반복할 횟수를 지정할 수 있습니다.
예를 들어, 특정 좌표를 여러 번 클릭하려면 다음과 같이 $operationPoints 배열에 해당 좌표를 여러 번 추가하고 짧은 대기 시간을 설정하면 됩니다.
# 클릭할 위치와 각 클릭 사이의 대기 시간 목록 (예시)
$operationPoints = @(
@{ X = 121; Y = 248; DelaySec = 5 },
@{ X = 101; Y = 426; DelaySec = 10 },
@{ X = 101; Y = 101; DelaySec = 1 }, # (101,101) 좌표를 1초 간격으로 3번 클릭
@{ X = 101; Y = 101; DelaySec = 1 },
@{ X = 101; Y = 101; DelaySec = 1 },
@{ X = 122; Y = 741; DelaySec = 10 }
)
# 전체 클릭 시퀀스를 무한히 반복하려면 아주 큰 숫자를 설정할 수 있습니다.
$executionCycles = 99999
주의사항: 실행 정책 복원
스크립트 자동화 작업이 완료된 후에는 보안 강화를 위해 PowerShell 실행 정책을 원래대로 복원하는 것이 좋습니다. 다음 명령어를 사용하여 실행 정책을 Restricted로 되돌릴 수 있습니다.
Set-ExecutionPolicy Restricted
PowerShell 실행 정책에 대한 간략한 설명:
Restricted: PowerShell 스크립트 실행을 허용하지 않습니다.AllSigned: 신뢰할 수 있는 게시자가 서명한 스크립트만 실행을 허용합니다.RemoteSigned: 로컬 스크립트 실행을 허용하지만, 인터넷에서 다운로드한 스크립트는 신뢰할 수 있는 게시자의 서명이 필요합니다.Unrestricted: 모든 스크립트 실행을 허용하지만, 인터넷에서 다운로드한 스크립트 실행 시 경고 메시지를 표시합니다.