Skip to content
Snippets Groups Projects
Commit c993fd12 authored by 배찬희's avatar 배찬희
Browse files

commit actgui

parent ea871036
No related branches found
No related tags found
No related merge requests found
actgui.py 0 → 100644
import time
import math
import pyautogui
#################################################################################
# 손동작 기록
#00000: 기본 상태1
#11000: 좌 클릭(clickPosX,Y,clickValue)
#11100: 우 클릭(clickPosX,Y,clickValue)
#10001: 드래그(dragPosX,Y), 종료
#11001: 캡쳐(shortcut)
#11111: 확대(toZoom, t, tm), 단축키(shortcut)(01100: 복사, 01111: 붙여넣기 11001: 캡쳐, 10001: 종료)
#01000: 기본 상태2, 축소(toZoomOut, t, tm)
#01100: 커서 이동(pos_2,3,time_k_p), 복사(shortcut)
#01110: 실행취소-재실행(pos_4,5)
#01111: 뒤로 가기-앞으로 가기(pos_6,7), 스크롤(pos6,7), 붙여넣기(shortcut)
#-1:
##################################################################################
#prob
global case
global preCase
case = -1
preCase = -1
#pos
global pos
pos = []
# screen size
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(720,400)
pyautogui.FAILSAFE = False
# set pre-pos
global pos_p2
global pos_p3
global pos_p4
global pos_p5
global pos_p6
global pos_p7
pos_p2 = -1.0
pos_p3 = -1.0
pos_p4 = -1.0
pos_p5 = -1.0
pos_p6 = -1.0
pos_p7 = -1.0
# set drag position
global dragPosX
global dragPosY
dragPosX = -1.0
dragPosY = -1.0
# set click position
global clickPosX
global clickPosX
global clickValue
clickPosX = -1.0
clickPosY = -1.0
clickValue = 0
# set time
global tAt1000
global tAt1111
global tAt11111
global time_k_p
global tLeftClick
global tRightClick
global tTermination
tAt1000= 0
tAt1111 = 0
tAt11111 = 0
time_k_p = 0
tRightClick = 0
tLeftClick = 0
tTermination = 0
# flag
global zoomf # 0: defalt, 1: zoom, 2: zoomout
global shortcutf # 0: defalt, 1: use shortcut
global scrollf # 0: defalt, 1: up, 2: down
global zeroCount
zoomf = 0
shortcutf = 0
scrollf = 0
zeroCount = 0
def store_pos(Pos):
global pos
pos = Pos
def hand_check(prob):
global case
if ((prob[0] == 0.0)&(prob[1] == 0.0)&(prob[2] == 0.0)&(prob[3] == 0.0)&(prob[4] == 0.0)):
case = 0
return 0
if ((prob[0] == 0.0)&(prob[1] == 1.0)&(prob[2] == 0.0)&(prob[3] == 0.0)&(prob[4] == 0.0)):
case = 1000
return 1000
if ((prob[0] == 0.0)&(prob[1] == 1.0)&(prob[2] == 1.0)&(prob[3] == 0.0)&(prob[4] == 0.0)):
case = 1100
return 1100
if ((prob[0] == 0.0)&(prob[1] == 1.0)&(prob[2] == 1.0)&(prob[3] == 1.0)&(prob[4] == 0.0)):
case = 1110
return 1110
if ((prob[0] == 0.0)&(prob[1] == 1.0)&(prob[2] == 1.0)&(prob[3] == 1.0)&(prob[4] == 1.0)):
case = 1111
return 1111
if ((prob[0] == 1.0)&(prob[1] == 1.0)&(prob[2] == 1.0)&(prob[3] == 1.0)&(prob[4] == 1.0)):
case = 11111
return 11111
if ((prob[0] == 1.0)&(prob[1] == 1.0)&(prob[2] == 0.0)&(prob[3] == 0.0)&(prob[4] == 0.0)):
case = 11000
return 11000
if ((prob[0] == 1.0)&(prob[1] == 1.0)&(prob[2] == 1.0)&(prob[3] == 0.0)&(prob[4] == 0.0)):
case = 11100
return 11100
if ((prob[0] == 1.0)&(prob[1] == 0.0)&(prob[2] == 0.0)&(prob[3] == 0.0)&(prob[4] == 1.0)):
case = 10001
return 10001
if ((prob[0] == 1.0)&(prob[1] == 1.0)&(prob[2] == 0.0)&(prob[3] == 0.0)&(prob[4] == 0.0)):
case = 11000
return 11000
if ((prob[0] == 1.0)&(prob[1] == 1.0)&(prob[2] == 0.0)&(prob[3] == 0.0)&(prob[4] == 1.0)):
case = 11001
return 11001
if ((prob[0] == 1.0)&(prob[1] == 1.0)&(prob[2] == 1.0)&(prob[3] == 1.0)&(prob[4] == 0.0)):
case = 11110
return 11110
case = -1
return -1
def initialize_coordinate():
# 좌표 초기화
currentMouseX, currentMouseY = pyautogui.position()
if (currentMouseX > screenWidth-1):
pyautogui.moveTo(screenWidth-1, currentMouseY)
currentMouseX, currentMouseY = pyautogui.position()
if (currentMouseY > screenHeight-1):
pyautogui.moveTo(currentMouseX, screenHeight-1)
currentMouseX, currentMouseY = pyautogui.position()
if (currentMouseX < 0):
pyautogui.moveTo(0, currentMouseY)
currentMouseX, currentMouseY = pyautogui.position()
if (currentMouseY < 0):
pyautogui.moveTo(currentMouseX, 0)
def initialize_variable():
if (case == preCase):
global pos_p2
global pos_p3
global pos_p4
global pos_p5
global pos_p6
global pos_p7
global time_k_p
global clickPosX
global clickPosY
global clickValue
global scrollf
global zoomf
if (case != 0):
zeroCount = 0
if (case != 1000 and case != 11111):
zoomf = 0
if (case != 1000 and case != 1111):
scrollf = 0
if (case != 11111 and case != 1100 and case != 1111 and case != 11001):
shortcutf = 0
if (case != 1100):
pos_p2 = -1.0
pos_p3 = -1.0
time_k_p = 0
if (case != 1110):
pos_p4 = -1.0
pos_p5 = -1.0
if (case != 1111):
pos_p6 = -1.0
pos_p7 = -1.0
if (case != 11000 and case != 11100 and case != 11110):
clickPosX = -1.0
clickPosY = -1.0
clickValue = 0
def terminate_check():
if (shortcutf == 1 and case == 10001):
# 종료
global tTermination
if (tTermination == 0):
tTermination = time.time()
t = time.time() - tTermination
if (t >= 2):
tTermination = 0
if (t > 1 and t < 2):
print("Termination")
return True
return False
def hand_speed(diff_pos2, diff_pos3):
diff_t = time.time() - time_k_p
d = math.sqrt(pow(diff_pos2,2) + pow(diff_pos3,2))
v = d / diff_t
if(v > 800): mult_v = 2.0
elif (v <= 800 and v > 400): mult_v = 1.5
elif (v <= 400 and v > 100): mult_v = 1.0
else: mult_v = 0.5
return mult_v
##########################################
# 뒤에 shortcut = 0
##########################################
def shortcut():
if (shortcutf == 1):
if (case == 1100):
# 단축키 복사
pyautogui.hotkey('command','c')
if (case == 1111):
# 단축키 붙여넣기
pyautogui.hotkey('command','v')
if (case == 11001):
# 단축키 캡쳐
print("capture")
pyautogui.hotkey('command', 'shift', '4')
##########################################
# true이면 pos_p67 갱신
##########################################
def forward_back(diff_pos6):
if (abs(diff_pos6) > 200.0):
# 가로
if (diff_pos6 > 0):
print("back")
pyautogui.hotkey('command','[')
elif (diff_pos6 < 0):
print("forward")
pyautogui.hotkey('command',']')
return True
return False
##########################################
# true이면 pos_p67 갱신
##########################################
def scroll():
print("scroll")
if (scrollf == 1):
pyautogui.scroll(5)
elif (scrollf == 2):
pyautogui.scroll(-5)
##########################################
# true이면 pos_p45 갱신
##########################################
def undo_redo(diff_pos4):
if (abs(diff_pos4) > 200.0):
# 가로
if (diff_pos4 > 0):
print("undo")
pyautogui.hotkey('command','z')
elif (diff_pos4 < 0):
print("redo")
pyautogui.hotkey('command', 'shift', 'z')
return True
return False
##########################################
# 좌클릭
##########################################
def left_click():
global tLeftClick
if (clickValue != 1):
if (tLeftClick == 0):
tLeftClick = time.time()
t = time.time() - tLeftClick
if (t >= 2):
tLeftClick = time.time()
elif (t > 0.4 and t < 2):
# currentMouseX, currentMouseY = pyautogui.position()
# if (clickPosX != currentMouseX or clickPosY != currentMouseY):
pyautogui.click(button='left')
return True
return False
##########################################
# 우클릭
##########################################
def right_click():
if (clickValue != 2):
# currentMouseX, currentMouseY = pyautogui.position()
# if (clickPosX != currentMouseX or clickPosY != currentMouseY):
pyautogui.click(button='right')
return True
return False
##########################################
# false 시 dragPosX,Y 갱신, print("remeber")
# true 시 dragPosX,Y 초기화
###############################################
def drag():
if (dragPosX == -1.0 and dragPosY == -1.0):
return False
currentMouseX, currentMouseY = pyautogui.position()
if (abs(currentMouseX - dragPosX) > 0 or abs(currentMouseY - dragPosY) > 0):
pyautogui.moveTo(dragPosX, dragPosY)
pyautogui.dragTo(currentMouseX, currentMouseY,2, button='left')
return True
def zoom():
if (zoomf == 1):
pyautogui.hotkey('command','+')
elif (zoomf == 2):
pyautogui.hotkey('command','-')
##########################################
# true 시
# pos_p2 = pos[2]
# pos_p3 = pos[3]
# time_k_p = time.time()
##########################################
def move_cursor(diff_pos2, diff_pos3):
if (abs(diff_pos2) > 10.0 or abs(diff_pos3) > 10.0):
# 속도 구하기
mult_v = hand_speed(diff_pos2, diff_pos3)
currentMouseX, currentMouseY = pyautogui.position()
if (abs(diff_pos2) > 10.0 and abs(diff_pos3) > 10.0):
nextX = (screenWidth - 1) if currentMouseX-int(diff_pos2*mult_v) > screenWidth-1 else (currentMouseX - int(diff_pos2)*mult_v)
nextY = (screenHeight - 1) if currentMouseY-int(diff_pos3*mult_v) > screenHeight-1 else (currentMouseY - int(diff_pos3)*mult_v)
nextX = 0 if nextX < 0 else nextX
nextY = 0 if nextY < 0 else nextY
pyautogui.moveTo(nextX, nextY, 0.2)
return True
elif (abs(diff_pos2) > 10.0): # 상하
nextX = (screenWidth - 1) if currentMouseX-int(diff_pos2*mult_v*1.5) > screenWidth-1 else (currentMouseX - int(diff_pos2)*mult_v*1.5)
nextX = 0 if nextX < 0 else nextX
nextY = currentMouseY
pyautogui.moveTo(nextX, nextY, 0.2)
return True
elif (abs(diff_pos3) > 10.0): # 좌우
nextX = currentMouseX
nextY = (screenHeight - 1) if currentMouseY-int(diff_pos3*mult_v) > screenHeight-1 else (currentMouseY - int(diff_pos3)*mult_v)
nextY = 0 if nextY < 0 else nextY
pyautogui.moveTo(nextX, nextY, 0.2)
return True
else: return False
def act_gui():
global preCase
global pos_p2
global pos_p3
global pos_p4
global pos_p5
global pos_p6
global pos_p7
global dragPosX
global dragPosY
global clickValue
global clickPosX
global clickPosY
global tAt1000
global tAt1111
global tAt11111
global time_k_p
global tLeftClick
global tRightClick
global zoomf
global shortcutf
global scrollf
if (case == 1000):
if (zoomf == 2):
zoom()
tAt1000 = time.time()
elif (scrollf == 2):
scroll()
tAt1000 = time.time()
elif (time.time() - tAt11111 < 1):
zoomf = 2
elif (time.time() - tAt1111 < 1):
scrollf = 2
else:
scrollf = 0
zoomf = 0
tAt1000 = time.time()
elif (case == 1100):
#단축키 복사
##########################################
# 뒤에 shortcutf = 0
##########################################
shortcut()
shortcutf = 0
if (pos_p2 == -1.0 and pos_p3 == -1.0):
pos_p2 = pos[2]
pos_p3 = pos[3]
time_k_p = time.time()
diff_pos2 = pos_p2 - pos[2]
diff_pos3 = pos_p3 - pos[3]
# 커서 이동
##########################################-
# true 시
# pos_p2 = pos[2]
# pos_p3 = pos[3]
# time_k_p = time.time()
##########################################
bool = move_cursor(diff_pos2, diff_pos3)
if (bool):
pos_p2 = pos[2]
pos_p3 = pos[3]
time_k_p = time.time()
elif (case == 1110):
if (pos_p4 == -1.0 and pos_p5 == -1.0):
pos_p4 = pos[4]
pos_p5 = pos[5]
diff_pos4 = pos_p4 - pos[4]
# 재실행, 실행취소
##########################################
# true이면 pos_p45 갱신
##########################################
bool = undo_redo(diff_pos4)
if (bool):
pos_p4 = pos[4]
pos_p5 = pos[5]
elif (case == 1111):
if (shortcutf == 1):
# 단축키 붙여넣기
##########################################
# 뒤에 shortcutf = 0
##########################################
shortcut()
shortcutf = 0
elif (scrollf == 1):
scroll()
tAt1111 = time.time()
elif (time.time() - tAt1000 < 1):
scrollf = 1
else:
scrollf = 0
tAt1111 = time.time()
if (pos_p6 == -1.0 and pos_p7 == -1.0):
pos_p6 = pos[6]
pos_p7 = pos[7]
diff_pos6 = pos_p6 - pos[6]
diff_pos7 = pos_p7 - pos[7]
# 앞으로 뒤로 가기
##########################################
# true이면 pos_p67 갱신
##########################################
bool = forward_back(diff_pos6)
if (bool):
pos_p6 = pos[6]
pos_p7 = pos[7]
elif (case == 11111):
if (zoomf == 1):
zoom()
tAt11111 = time.time()
elif (time.time() - tAt1000 < 1):
zoomf = 1
else:
zoomf = 0
tAt11111 = time.time()
shortcutf = 1
elif (case == 11000):
bool = left_click()
if (bool):
currentMouseX, currentMouseY = pyautogui.position()
clickPosX = currentMouseX
clickPosY = currentMouseY
clickValue = 1
elif (case == 11100 or case == 11110):
bool = right_click()
if (bool):
currentMouseX, currentMouseY = pyautogui.position()
clickPosX = currentMouseX
clickPosY = currentMouseY
clickValue = 2
elif (case == 10001):
if (shortcutf == 0):
# 드래그
##########################################
# false 시 dragPosX,Y 갱신, print("remeber")
# true 시 dragPosX,Y 초기화
##########################################
bool = drag()
if (bool):
dragPosX = -1.0
dragPosY = -1.0
else:
print ("remember")
currentMouseX, currentMouseY = pyautogui.position()
dragPosX = currentMouseX
dragPosY = currentMouseY
elif (case == 11001):
# 단축키 캡쳐
##########################################
#뒤에 shortcutf = 0
##########################################
shortcut()
shortcutf = 0
preCase = case
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment