[python] cx_Freeze를 사용하여 작성한 실행 파일의 키보드 및 마우스 제어 방법

cx_Freeze는 Python 스크립트를 실행 파일로 변환해주는 라이브러리입니다. 이것을 사용하여 작성한 실행 파일에서 키보드 및 마우스를 제어하는 방법을 알아보겠습니다.

키보드 제어

1. PyAutoGUI 사용하기

PyAutoGUI는 Python으로 키보드와 마우스를 제어할 수 있는 강력한 라이브러리입니다. cx_Freeze 실행 파일에서도 동작하며, 다음과 같은 방법으로 키보드를 제어할 수 있습니다.

import pyautogui

# 예시로 키보드를 누르고 떼는 동작을 수행하는 함수입니다.
def press_and_release_keys():
    pyautogui.press('enter')
    pyautogui.typewrite('Hello, World!')

# 메인 실행 함수
def main():
    press_and_release_keys()

if __name__ == '__main__':
    main()

2. ctypes 사용하기

ctypes는 C 함수를 호출하여 키보드를 제어할 수 있게 해주는 Python 라이브러리입니다. cx_Freeze 실행 파일에서도 작동하며, 아래의 예시 코드를 참고하세요.

from ctypes import *
import time

# 윈도우 키보드 제어를 위해 필요한 상수들
VK_RETURN = 0x0D
KEYEVENTF_EXTENDEDKEY = 0x0001
KEYEVENTF_KEYUP = 0x0002

# C 함수 선언
user32 = windll.user32
input_ = INPUT()

# 키보드를 누르고 떼는 동작을 수행하는 함수입니다.
def press_and_release_keys():
    # 엔터 키를 누름
    input_.ki = KeyBdInput(VK_RETURN, 0x1C, KEYEVENTF_EXTENDEDKEY, 0)
    user32.SendInput(1, byref(input_), sizeof(input_))

    # 엔터 키를 뗌
    input_.ki = KeyBdInput(VK_RETURN, 0x1C, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0)
    user32.SendInput(1, byref(input_), sizeof(input_))

    # 메세지를 입력하고 엔터 키를 입력
    time.sleep(1)  # cx_Freeze 실행 파일 안에서 키 입력 딜레이를 주기 위한 sleep
    input_.ki = KeyBdInput(VK_RETURN, 0x1C, 0, 0)
    user32.SendInput(1, byref(input_), sizeof(input_))

# 메인 실행 함수
def main():
    press_and_release_keys()

if __name__ == '__main__':
    main()

마우스 제어

1. PyAutoGUI 사용하기

PyAutoGUI는 마우스를 움직이고 클릭하는 등의 동작을 자동화하는 데 사용할 수 있는 도구입니다. cx_Freeze 실행 파일에서도 잘 동작합니다. 예시 코드를 참고하세요.

import pyautogui

# 예시로 마우스를 이동하고 클릭하는 동작을 수행하는 함수입니다.
def move_and_click():
    # 해당 좌표로 마우스를 이동
    pyautogui.moveTo(100, 100)

    # 마우스 클릭
    pyautogui.click()

# 메인 실행 함수
def main():
    move_and_click()

if __name__ == '__main__':
    main()

2. ctypes 사용하기

ctypes를 사용하여 C 함수를 호출하여 마우스를 제어할 수도 있습니다. 아래의 예시 코드를 참고하세요.

from ctypes import *

# 윈도우 마우스 제어를 위해 필요한 상수들
MOUSEEVENTF_MOVE = 0x0001
MOUSEEVENTF_LEFTDOWN = 0x0002
MOUSEEVENTF_LEFTUP = 0x0004

# C 함수 선언
user32 = windll.user32
input_ = INPUT()

# 마우스를 이동시키고 클릭하는 동작을 수행하는 함수입니다.
def move_and_click():
    # 100, 100 좌표로 마우스 이동
    input_.mi = MouseInput(100, 100, 0, (MOUSEEVENTF_MOVE))
    user32.SendInput(1, byref(input_), sizeof(input_))

    # 마우스 클릭
    input_.mi = MouseInput(100, 100, 0, (MOUSEEVENTF_LEFTDOWN))
    user32.SendInput(1, byref(input_), sizeof(input_))

    # 마우스 클릭 해제
    input_.mi = MouseInput(100, 100, 0, (MOUSEEVENTF_LEFTUP))
    user32.SendInput(1, byref(input_), sizeof(input_))

# 메인 실행 함수
def main():
    move_and_click()

if __name__ == '__main__':
    main()

위의 예시 코드를 참고하여 cx_Freeze로 빌드된 실행 파일에서 키보드와 마우스를 제어할 수 있습니다. 각각의 라이브러리는 다양한 기능을 제공하므로 사용에 따라 적합한 방법을 선택하시면 됩니다.

더 많은 정보를 원하시면 다음 참고 자료를 확인해주세요.