콘텐츠로 건너뛰기
» Pynput을 이용한 키보드 후킹, 파이썬, pyqt

Pynput을 이용한 키보드 후킹, 파이썬, pyqt

윈도우 포커스가 없을 때 특정 키보드 입력을 감지하려면 키보드 후킹이 필요합니다. 이를 위해 Python에서는 pyhook 또는 pynput과 같은 라이브러리를 사용할 수 있습니다. 여기서는 pynput을 사용하여 F2를 눌렀을 때 프로그램이 동작하는 방법을 설 명합니다.

1. pynput 설치

먼저 pynput 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:

pip install pynput

2. pynput을 사용한 키보드 후킹

아래는 pynput을 사용하여 특정 키보드 입력을 감지하고, PyQt5 애플리케이션에서 해당 키가 눌렸을 때 특정 동작을 수행하는 예제입니다.

import sys
import threading
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget
from pynput import keyboard

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Global Key Hook Example")
        self.setGeometry(100, 100, 400, 200)

        self.label = QLabel("Press 'F2' to trigger an action", self)

        layout = QVBoxLayout()
        layout.addWidget(self.label)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def trigger_action(self):
        self.label.setText("F2 key pressed!")

def on_press(key, window):
    try:
        if key == keyboard.Key.f2:
            # Trigger the action in the PyQt window
            window.trigger_action()
    except AttributeError:
        pass

def start_keyboard_listener(window):
    listener = keyboard.Listener(on_press=lambda key: on_press(key, window))
    listener.start()
    listener.join()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()

    # Start the keyboard listener in a separate thread
    listener_thread = threading.Thread(target=start_keyboard_listener, args=(window,), daemon=True)
    listener_thread.start()

    sys.exit(app.exec_())

설명

  1. PyQt5 윈도우 설정
  • MainWindow 클래스는 기본 PyQt5 윈도우 설정을 수행합니다.
  • trigger_action 메서드는 F2 키가 눌렸을 때 수행할 동작을 정의합니다.
  1. 키보드 후킹 설정
  • pynput 라이브러리의 keyboard.Listener를 사용하여 전역 키보드 이벤트를 감지합니다.
  • on_press 함수는 키가 눌렸을 때 호출되며, F2 키가 눌리면 window.trigger_action()을 호출합니다.
  1. 멀티스레딩 사용
  • keyboard.Listener는 별도의 스레드에서 실행되어, PyQt5 이벤트 루프와 병행하여 키보드 입력을 감지합니다.
  • listener_thread 스레드를 생성하여 키보드 리스너를 실행합니다.

주의사항

  • 보안 및 성능: 키보드 후킹은 보안과 성능에 영향을 줄 수 있습니다. 특히 전역 후킹은 모든 키 입력을 감지하므로 악용될 소지가 있습니다. 사용 시 주의해야 합니다.
  • 관리자 권한: 일부 운영 체제에서는 전역 후킹을 설정하려면 관리자 권한이 필요할 수 있습니다.

이 예제는 전역 키보드 후킹을 사용하여 PyQt5 애플리케이션에서 특정 키 입력을 감지하고 동작을 수행하는 방법을 보여줍니다. pynput 라이브러리를 사용하면 쉽게 전역 키보드 입력을 처리할 수 있습니다.