반응형
특정한 위치에 마우스를 가져다 놓고, ctrl + 1 을 눌러서 position 1 을 저장하고
다시 두번째 위치에 마우스를 가져다 놓고 ctrl + 2 를 눌러서 position 2를 저장한다.
그리고 저장이 끝나면
[5초 sleep > 현재 위치 저장 > position1 클릭 > position2 클릭 > 현재 위치로 돌아옴]
을 반복하는 프로그램이다.
import threading
import keyboard
import pyautogui
global scr_width
global scr_height
global position1_cur_x
global position1_cur_y
global position2_cur_x
global position2_cur_y
# 마우스가 화면 끝까지 가도 프로그램이 종료되지 않는다
pyautogui.FAILSAFE = False
def positioni_scr_out() -> bool:
global scr_width
global scr_height
cur_x, cur_y = pyautogui.position()
if cur_x < 0 or cur_x > scr_width or cur_y < 0 or cur_y > scr_height:
print("program stopped: ", end = " ")
print("cur_x is " + str(cur_x), end = " ")
print("cur_y is " + str(cur_y))
return True
return False
def get_keyboard():
global position1_cur_x
global position1_cur_y
global position2_cur_x
global position2_cur_y
flag1 = 0
flag2 = 0
while True:
if keyboard.is_pressed("ctrl+1") and flag1 == 0:
flag1 = 1
position1_cur_x, position1_cur_y = pyautogui.position()
print("target saved" + " position1_cur_x is " + str(position1_cur_x) + " position1_cur_y is " + str(position1_cur_y))
if keyboard.is_pressed("ctrl+2") and flag2 == 0:
flag2 = 1
position2_cur_x, position2_cur_y = pyautogui.position()
print("target saved" + " position2_cur_x is " + str(position2_cur_x) + " position2_cur_y is " + str(position2_cur_y))
if flag1 + flag2 == 2:
break
def do_action():
global scr_width
global scr_height
global position1_cur_x
global position1_cur_y
global position2_cur_x
global position2_cur_y
while True:
pyautogui.sleep(5)
if positioni_scr_out():
break
return_cur_x,return_cur_y = pyautogui.position()
pyautogui.click(position1_cur_x, position1_cur_y)
pyautogui.sleep((0.01))
if positioni_scr_out():
break
pyautogui.click(position2_cur_x, position2_cur_y)
if positioni_scr_out():
break
pyautogui.moveTo(return_cur_x, return_cur_y)
def main():
global scr_width
global scr_height
global position1_cur_x
global position1_cur_y
global position2_cur_x
global position2_cur_y
scr_width, scr_height = pyautogui.size()
act_thread = threading.Thread(target = do_action)
key_thread = threading.Thread(target = get_keyboard)
key_thread.start()
act_thread.start()
if __name__ == "__main__":
main()
두개의 thread 를 돌린다.
하나는 키보드 입력을 받는 key_thread 이고
또 하나는 2개의 position 을 클릭하고 제자리로 돌아오는 act_thread 이다.
실행해보니 한가지 버그가 있는데,
시작하고 act_thread 가 5초간 기다리는데, 5초 이후에도 ctrl+1, ctrl+2 로
포인트가 저장되지 않으면 에러가 발생한다. (나중에 수정해야 겠다.)
threading 으로 thread 패키지를 받아왔고,
keyboard, pyautogui 로 구현했다.
금방 할줄 알았는데, 생각보다 해야 할것이 좀 있었다.
반응형
'python' 카테고리의 다른 글
[파이썬] with ~ as 구문의 이해 (0) | 2023.02.07 |
---|---|
[python] list, 배열, array 선언하는 법 (0) | 2023.01.14 |
[python] for문 index 주의할 점 (0) | 2023.01.14 |
[python][pyautogui] 자동화의 기본 pyautogui 기초명령어 (0) | 2023.01.13 |
[python][win32com] 여러 엑셀 파일 자료를 한 시트로 모으기 (0) | 2023.01.03 |
댓글