※ 위의 글에서 수정한 버전입니다.
※ 일부 게임가드는 이 기능을 사용할 수 없도록 막고 있습니다.(참고)
비활성 클릭이란?
창을 마우스로 선택하지 않아도, 창이 다른창에 가려져 있어도 클릭할 수 있는 방식
Requirements
1. 파이썬 라이브러리 설치
pip install pywin32
2. 화상 키보드 설정
좌표를 입력하는 방식이기 때문에, 크기와 레이아웃이 제 설정과 같아야 합니다.
다음 순서에 따라 설정을 완료하세요.
① win + ctrl + o 키를 동시에 눌러 화상 키보드 실행
② 옵션에 진입한 후, 아래 이미지와 같이 설정 후 확인
③ 창 크기를 가장 작게 줄이기(아래 그림처럼 모서리를 잡아서 작아지도록)
osk.py
import time
import win32gui, win32ui, win32con, win32api
from win32com.shell import shell
class OSK:
def __init__(self):
if not shell.IsUserAnAdmin():
raise Exception("관리자 권한이 필요합니다")
self.hwnd = win32gui.FindWindow(None, "화상 키보드")
if not self.hwnd:
raise Exception("화상 키보드가 실행중이지 않습니다")
else:
self.hwnd_sub = self.getInnerWindows(self.hwnd)["DirectUIHWND"]
self.win = win32ui.CreateWindowFromHandle(self.hwnd_sub)
def getInnerWindows(self, 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
def click(self, x, y):
lParam = win32api.MAKELONG(x, y)
self.win.PostMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)
time.sleep(0.1)
self.win.PostMessage(win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, lParam)
def press(self, key):
posX = {"1":55, "2":80, "3":105, "4":130, "5":155, "6":180, "7":205, "8":230, "9":255, "0":280}
self.click(posX[key], 16)
app = OSK()
for i in range(0, 10):
app.press(str(i))
time.sleep(0.2)
실행화면
[끝].
728x90
'소프트웨어 > 파이썬' 카테고리의 다른 글
[파이썬] pywin32를 이용해 윈도우 화면에 그리기 (0) | 2022.06.02 |
---|---|
[파이썬] socket.io를 이용한 callback 함수 (0) | 2022.06.01 |
[파이썬] 윈도우 화면 캡처 (with mss) (3) | 2022.03.10 |
[파이썬] 소켓 통신 예제 (0) | 2022.02.15 |
[파이썬] 1대의 아두이노와 여러앱과의 통신(작성중) (11) | 2022.02.15 |
댓글