안녕하세요? 만들오 입니다.
최근 게임 매크로에 비활성 키 입력을 사용하고 있습니다.
- 비활성 키 입력이란? 창이 다른 화면에 가려져 있어도 입력하는 방식
이 방식으로 바로 게임창으로 키 입력을 보내는게 가장 좋은데, 게임사에서 막아놓곤 합니다.
아래 깃허브 홈페이지에서, 비활성 키보드 입력하는 부분을 마우스 입력으로 변경해 보았습니다.
import win32gui, win32ui, win32con, win32api, time
def get_inner_windows(whndl):
def callback(hwnd, hwnds):
if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
hwnds[win32gui.GetClassName(hwnd)] = hwnd
return True
hwnds = {}
win32gui.EnumChildWindows(whndl, callback, hwnds)
return hwnds
#중요 : 안되면 관리자 권한으로 해볼 것
#화상 키보드 대상 win + ctrl + o 키로 실행할 수 있다.
window_name = "화상 키보드"
hwnd = win32gui.FindWindow(None, window_name)
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
win32gui.MoveWindow(hwnd, left, top, 576, 173, True)
#get_inner_windows() 함수를 통해 내부 클래스의 핸들을 가져온다.
#미리 코드를 실행시켜 확인한 결과 : DirectUIHWND
hwnd_sub = get_inner_windows(hwnd)['DirectUIHWND']
#이 코드가 핵심이었다. 다른 예제에서는 찾기 어려웠음.
win = win32ui.CreateWindowFromHandle(hwnd_sub)
#화상 키보드에 x=100, y=100좌표(숫자 1 위치)를 long타입으로 만들어 준다
lParam = win32api.MAKELONG(53, 35)
#마우스 다운
win.PostMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)
time.sleep(0.2)
#마우스 업
win.PostMessage(win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, lParam)
#문자를 보내는 경우
#win.SendMessage(win32con.WM_CHAR, ord('A'), 0)
#win.SendMessage(win32con.WM_CHAR, ord('B'), 0)
#win.SendMessage(win32con.WM_KEYDOWN, 0x1E, 0)
#sleep(0.5)
#win.SendMessage(win32con.WM_KEYUP, 0x1E, 0)
728x90
'소프트웨어 > 파이썬' 카테고리의 다른 글
[파이썬]PySimpleGUI - 간략한 소개 (6) | 2022.02.07 |
---|---|
[파이썬] OpenCV로 GUI 만들기 (4) | 2022.01.21 |
[파이썬] Pyinstaller dll 포함한 빌드 - 실패공유 (7) | 2022.01.13 |
[파이썬] ESP32-CAM 스트리밍 영상 불러오기(Tkinter, OpenCV) (8) | 2021.07.02 |
[파이썬] Tkinter & OpenCV 스트리밍 화면에 마우스 이벤트 추가 (0) | 2021.06.30 |
댓글