Пример #1
0
 def detect_key_state_thread(self, key, active, vk, key_state): # 키보드 입력 감지 스레드
     global exit_var
     while True:
         sem.acquire() # 임계영역 생성
         if exit_var: # 스레드 종료 변수 값이 설정됐을 경우
             sem.release() # 임계영역 해제
             return # 스레드 종료
         cur_key_state = win32api.GetKeyState(vk[1]) # 현재 키보드 입력 상태
         if cur_key_state != key_state: # 키보드 입력 상태가 변경됐을 경우
             key_state = cur_key_state # 키보드 입력 상태 갱신
             if key_state == -127 or key_state == -128: # 두번 실행 방지
                 act = active.split(' ') # 설정 파일 내용 저장
                 if key == self.pause: # 입력한 키가 설정한 중지 키일 경우
                     exit_var = True # 스레드 종료 변수 값 설정
                     self.start = False # 시작 버튼 눌림 여부 값 변경
                     self.statusBar.showMessage('Pause') # 상태 표시줄 내용 갱신
                     sem.release() # 임계영역 해제
                     return # 스레드 종료
                 for i in range(0, len(act)): # 설정 파일
                     if act[i] == key + ':' and i == 0: # 핫키 구분자일 경우
                         continue
                     elif i%2 == 0 and i != 1: # 딜레이 시간일 경우
                         time.sleep(float(act[i])) # 딜레이 시간만큼 정지
                     elif i%2 == 1 or i == 1: # 동작일 경우
                         if 'move' in act[i]: # 마우스 이동일 경우
                             move_x = act[i].split('^')[1].split(',')[0] # 이동할 x값 저장
                             move_y = act[i].split('^')[1].split(',')[1] # 이동할 y값 저장
                             myMacro.move_mouse_game(int(move_x), int(move_y)) # 설정한 좌표로 마우스 이동
                         else: # 마우스 이동이 아닐 경우
                             if '^' in act[i]: # 지속 입력 및 클릭일 경우
                                 continue_time = act[i].split('^')[1] # 지속 시간 저장
                                 if 'leftclick' in act[i]: # 마우스 지속 좌클릭일 경우
                                     myMacro.click_mouse_down_left() # 마우스 좌클릭 상태 유지
                                     time.sleep(float(continue_time)) # 지속 시간만큼 대기
                                     myMacro.click_mouse_up_left() # 마우스 좌클릭 상태 해제
                                 elif 'rightclick' in act[i]: # 마우스 지속 우클릭일 경우
                                     myMacro.click_mouse_down_right() # 마우스 우클릭 상태 유지
                                     time.sleep(float(continue_time)) # 지속 시간만큼 대기
                                     myMacro.click_mouse_up_right() # 마우스 우클릭 상태 해제
                                 elif 'wheelclick' in act[i]: # 마우스 지속 휠클릭일 경우
                                     myMacro.click_mouse_down_wheel() # 마우스 휠클릭 상태 유지
                                     time.sleep(float(continue_time)) # 지속 시간만큼 대기
                                     myMacro.click_mouse_up_wheel() # 마우스 휠클릭 상태 해제
                                 else: # 키보드 지속 입력일 경우
                                     input_key = act[i].split('^')[0] # 입력 키 저장
                                     myMacro.input_down_keyboard(input_key) # 입력 키 눌림 상태 유지
                                     time.sleep(float(continue_time)) # 지속 시간만큼 대기
                                     myMacro.input_up_keyboard(input_key)# 입력 키 눌림 상태 해제
                             else: # 지속 입력 및 클릭이 아닐 경우
                                 if 'leftclick' in act[i]: # 마우스 좌클릭일 경우
                                     myMacro.click_mouse_left(0,0) # 마우스 좌클릭
                                 elif 'rightclick' in act[i]: # 마우스 우클릭일 경우
                                     myMacro.click_mouse_right(0,0) # 마우스 우클릭
                                 elif 'wheelclick' in act[i]: # 마우스 휠클릭일 경우
                                     myMacro.click_mouse_wheel() # 마우스 휠클릭
                                 else: # 키보드 입력일 경우
                                     myMacro.input_keyboard(act[i]) # 키보드 입력
         sem.release() # 임계영역 해제
Пример #2
0
 def startMacro(self, prog_pos_x, prog_pos_y, prog_size_x,
                prog_size_y):  # 매크로 시작할 때 필요한 작업을 수행하는 함수
     try:
         myMacro.move_mouse(prog_pos_x + prog_size_x / 20, prog_pos_y +
                            prog_size_y / 20)  # 메이플 프로그램 화면 좌측 상단으로 마우스 이동
         myMacro.click_mouse_left(0, 0)  # 메이플 프로그램 화면 좌측 상단 좌클릭
         myMacro.keyboardInput(
             self.macro_pause_restart)  # 메이플 매크로 중지 및 재시작 단축키 입력
     except Exception, e:
         self.statusBar.showMessage('[-] Error : ' + str(e))  # 상태 표시줄 내용 갱신
Пример #3
0
def autoServerStart(first_wait_time, server_file, vmware_name,
                    server_start_wait_time, tomcat8_service_restart,
                    guacd_service_restart):  # 서버 구동 함수
    time.sleep(first_wait_time)  # 로그인 후 안정화 될 때가지 대기
    ctypes.windll.shell32.ShellExecuteA(0, 'open', server_file, None, None,
                                        1)  # vmware 실행
    while True:
        state, prog_pos_x, prog_pos_y, prog_size_x, prog_size_y = myMacro.get_program_pos_size_include_maximum(
            vmware_name)  # vmware의 위치 및 크기 저장
        if state:  # vmware의 위치 및 크기를 제대로 찾았을 경우
            myMacro.move_mouse(prog_pos_x + prog_size_x / 2, prog_pos_y +
                               prog_size_y / 2)  # vmware 화면 중앙으로 마우스 이동
            myMacro.click_mouse_left(0, 0)  # vmware 화면 중앙 좌클릭
            time.sleep(0.1)
            myMacro.keyboardInput_combination('ctrl', 'b')  # 가상머신 구동 단축키 입력
            time.sleep(server_start_wait_time)  # 서버 켜질 때까지 대기
            break
    while True:
        state, prog_pos_x, prog_pos_y, prog_size_x, prog_size_y = myMacro.get_program_pos_size_include_maximum(
            vmware_name)  # vmware의 위치 및 크기 저장
        if state:  # vmware의 위치 및 크기를 제대로 찾았을 경우
            myMacro.move_mouse(prog_pos_x + prog_size_x / 2, prog_pos_y +
                               prog_size_y / 2)  # vmware 화면 중앙으로 마우스 이동
            myMacro.click_mouse_left(0, 0)  # vmware 화면 중앙 좌클릭
            time.sleep(0.1)
            # 아이디 입력
            myMacro.keyboardInput('r')
            myMacro.keyboardInput('o')
            myMacro.keyboardInput('o')
            myMacro.keyboardInput('t')
            myMacro.keyboardInput('enter')
            time.sleep(1.5)
            # 패스워드 입력
            myMacro.keyboardInput('x')
            myMacro.keyboardInput('x')
            myMacro.keyboardInput('x')
            myMacro.keyboardInput('x')
            myMacro.keyboardInput('x')
            myMacro.keyboardInput('x')
            myMacro.keyboardInput('x')
            myMacro.keyboardInput_combination('shift', '2')
            myMacro.keyboardInput('enter')
            time.sleep(5)
            # 톰캣 서비스 재시작
            for c in tomcat8_service_restart:
                myMacro.keyboardInput(c)
            myMacro.keyboardInput('enter')
            time.sleep(10)
            # 과카몰리 서비스 재시작
            for c in guacd_service_restart:
                myMacro.keyboardInput(c)
            myMacro.keyboardInput('enter')
            return
Пример #4
0
 def imageUpload(
         self, prog_pos_x2, prog_pos_y2, prog_size_x2,
         prog_size_y2):  # 거짓말 탐지기 이미지 내 캡차 스크린샷 파일을 카카오톡(채팅방)에 업로드하는 함수
     try:
         myMacro.move_mouse(prog_pos_x2 +
                            self.kakao_image_open_button_minus_pos_x,
                            prog_pos_y2 + prog_size_y2 -
                            self.kakao_image_open_button_minus_pos_y
                            )  # 카카오톡 채팅방 좌측 하단에 있는 사진 전송 버튼으로 마우스 이동
         myMacro.click_mouse_left(0, 0)  # 카카오톡 채팅방 좌측 하단에 있는 사진 전송 버튼 좌클릭
         pyperclip.copy(self.captcha_screenshot_file
                        )  # 거짓말 탐지기 이미지 내 캡차 스크린샷 파일명(경로 포함) 클립보드에 저장
         time.sleep(2)  # 업로드할 파일 선택 윈도우가 열릴 때까지 대기
         myMacro.keyboardInput_combination(
             'ctrl',
             'v')  # Ctrl + v 입력해서 거짓말 탐지기 이미지 내 캡차 스크린샷 파일명(경로 포함) 입력
         myMacro.keyboardInput(
             'enter')  # enter 입력해서 거짓말 탐지기 이미지 내 캡차 스크린샷 파일 업로드
         return True  # 업로드에 성공했을 경우의 반환
     except Exception, e:
         self.statusBar.showMessage('[-] Error : ' + str(e))  # 상태 표시줄 내용 갱신
         return False  # 업로드에 실패했을 경우의 반환
Пример #5
0
 def inputCode(self, code_list, prog_pos_x, prog_pos_y,
               detected_pos):  # 거짓말 탐지기 해제 코드를 입력하는 함수
     try:
         myMacro.move_mouse(
             prog_pos_x + detected_pos[0] + self.captcha_screenshot_x / 2,
             prog_pos_y + detected_pos[1] + self.captcha_screenshot_y /
             2)  # 메이플 화면 내의 거짓말 탐지기 이미지 중앙으로 마우스 이동
         myMacro.click_mouse_left(0, 0)  # 거짓말 탐지기 이미지 더블 클릭
         myMacro.click_mouse_left(0, 0)
         time.sleep(0.3)  # 딜레이
         myMacro.input_keyboard(
             'hanguel'
         )  # 한/영 키 입력(거짓말 탐지기의 경우 한글만 나오기 때문에 영어로 키가 설정돼 있어야 함(디폴트 영어))
         time.sleep(0.3)  # 딜레이
         for i in range(
                 0, len(code_list)):  # 거짓말 탐지기 해제 코드의 초성, 중성, 종성의 개수만큼 반복
             input_key = ''  # 입력할 키 저장 변수
             if code_list[i] == u'ㅂ':  # 해당 문자일 경우
                 input_key = 'q'  # 입력할 키 저장
             elif code_list[i] == u'ㅃ':  # 쌍자음, 쌍모음일 경우
                 input_key = 'q'  # 입력할 키 저장
                 myMacro.keyboardInput_combination(
                     'shift', input_key)  # Shift + input_key 입력
                 continue
             elif code_list[i] == u'ㅈ':
                 input_key = 'w'
             elif code_list[i] == u'ㅉ':
                 input_key = 'w'
                 myMacro.keyboardInput_combination('shift', input_key)
                 continue
             elif code_list[i] == u'ㄷ':
                 input_key = 'e'
             elif code_list[i] == u'ㄸ':
                 input_key = 'e'
                 myMacro.keyboardInput_combination('shift', input_key)
                 continue
             elif code_list[i] == u'ㄱ':
                 input_key = 'r'
             elif code_list[i] == u'ㄲ':
                 input_key = 'r'
                 myMacro.keyboardInput_combination('shift', input_key)
                 continue
             elif code_list[i] == u'ㅅ':
                 input_key = 't'
             elif code_list[i] == u'ㅆ':
                 input_key = 't'
                 myMacro.keyboardInput_combination('shift', input_key)
                 continue
             elif code_list[i] == u'ㅛ':
                 input_key = 'y'
             elif code_list[i] == u'ㅕ':
                 input_key = 'u'
             elif code_list[i] == u'ㅑ':
                 input_key = 'i'
             elif code_list[i] == u'ㅐ':
                 input_key = 'o'
             elif code_list[i] == u'ㅒ':
                 input_key = 'o'
                 myMacro.keyboardInput_combination('shift', input_key)
                 continue
             elif code_list[i] == u'ㅔ':
                 input_key = 'p'
             elif code_list[i] == u'ㅖ':
                 input_key = 'p'
                 myMacro.keyboardInput_combination('shift', input_key)
                 continue
             elif code_list[i] == u'ㅁ':
                 input_key = 'a'
             elif code_list[i] == u'ㄴ':
                 input_key = 's'
             elif code_list[i] == u'ㅇ':
                 input_key = 'd'
             elif code_list[i] == u'ㄹ':
                 input_key = 'f'
             elif code_list[i] == u'ㅎ':
                 input_key = 'g'
             elif code_list[i] == u'ㅗ':
                 input_key = 'h'
             elif code_list[i] == u'ㅓ':
                 input_key = 'j'
             elif code_list[i] == u'ㅏ':
                 input_key = 'k'
             elif code_list[i] == u'ㅣ':
                 input_key = 'l'
             elif code_list[i] == u'ㅋ':
                 input_key = 'z'
             elif code_list[i] == u'ㅌ':
                 input_key = 'x'
             elif code_list[i] == u'ㅊ':
                 input_key = 'c'
             elif code_list[i] == u'ㅍ':
                 input_key = 'v'
             elif code_list[i] == u'ㅠ':
                 input_key = 'b'
             elif code_list[i] == u'ㅜ':
                 input_key = 'n'
             elif code_list[i] == u'ㅡ':
                 input_key = 'm'
             myMacro.keyboardInput(input_key)  # 키 입력
             time.sleep(0.1)  # 딜레이
         myMacro.input_keyboard('hanguel')  # 영어로 키를 초기화 하기 위해 한/영 키 입력
         time.sleep(0.1)  # 딜레이
         myMacro.keyboardInput('enter')  # 거짓말 탐지기 해제 코드 입력 후 마지막으로 엔터 입력
         time.sleep(2)  # 거짓말 탐지기 해제 후 나오는 창이 나올 때까지 대기
         myMacro.keyboardInput('enter')  # 거짓말 탐지기 해제 후 나오는 창을 닫기 위해 엔터 입력
     except Exception, e:
         self.statusBar.showMessage('[-] Error : ' + str(e))  # 상태 표시줄 내용 갱신
Пример #6
0
 def receiveCode(self, prog_pos_x2, prog_pos_y2, prog_size_x2,
                 prog_size_y2):  # 거짓말 탐지기 해제 코드 받은 후 저장하는 함수
     try:
         exit = 0  # 탈출 변수 초기화
         while exit <= 60:  # 탈출 값이 60 이상일 경우 반복문 탈출(카카오톡(채팅방)에 카톡 확인을 못했거나 오탐 등의 이유로 거짓말 탐지기 해제 코드를 전송하지 않아도 특정 시간이 지나면 매크로를 재개하기 위해 탈출 필요)
             kakao_receive_color_pos_x = prog_pos_x2 + prog_size_x2 - self.kakao_receive_color_minus_pos_x  # 거짓말 탐지기 해제 코드 전송했을 때 글자 주변에 나타나는 색깔이 있는 특정 지점의 x 좌표
             kakao_receive_color_pos_y = prog_pos_y2 + prog_size_y2 - self.kakao_receive_color_minus_pos_y  # 거짓말 탐지기 해제 코드 전송했을 때 글자 주변에 나타나는 색깔이 있는 특정 지점의 y 좌표
             kakao_receive_code_pos_x = prog_pos_x2 + prog_size_x2 - self.kakao_receive_code_minus_pos_x  # 거짓말 탐지기 해제 코드 전송했을 때 나타나는 글자의 특정 지점의 x 좌표
             kakao_receive_code_pos_y = prog_pos_y2 + prog_size_y2 - self.kakao_receive_code_minus_pos_y  # 거짓말 탐지기 해제 코드 전송했을 때 나타나는 글자의 특정 지점의 y 좌표
             kakao_receive_color_pos_pixel = QPixmap.grabWindow(
                 QApplication.desktop().winId()
             ).toImage().pixel(
                 kakao_receive_color_pos_x, kakao_receive_color_pos_y
             )  # 거짓말 탐지기 해제 코드 전송했을 때 글자 주변에 나타나는 색깔이 있는 특정 지점의 픽셀 값(16진수) 저장
             kakao_receive_color_pixel_color = (
                 qBlue(kakao_receive_color_pos_pixel) * 65536 +
                 qGreen(kakao_receive_color_pos_pixel) * 256 +
                 qRed(kakao_receive_color_pos_pixel))  # 픽셀 값 10진수로 변경
             if self.kakao_receive_color == kakao_receive_color_pixel_color:  # 거짓말 탐지기 해제 코드 전송했을 때 글자 주변에 나타나는 색깔이 설정한 색일 경우(카카오톡 기본 테마를 사용하고 있어서 전송된 글자 주변에 나타나는 색깔이 노란색임. 평소에는 해당 위치가 배경색이나 특정 이미지의 색깔이지만 문자가 전송되면 해당 부분이 노란색으로 변경되는 것을 이용함. 만약 PC 카카오톡 테마를 바꿔서 전송된 글자 주변의 색깔이 다를 경우 그에 맞게 설정해야 함)
                 myMacro.move_mouse(
                     kakao_receive_code_pos_x, kakao_receive_code_pos_y
                 )  # 거짓말 탐지기 해제 코드 전송했을 때 나타나는 글자의 위치로 마우스 이동
                 myMacro.click_mouse_left(
                     0, 0)  # 거짓말 탐지기 해제 코드 전송했을 때 나타나는 글자 더블 클릭
                 myMacro.click_mouse_left(0, 0)
                 time.sleep(0.1)  # 더블 클릭 후 드래그 박스가 보일 때까지 잠시 대기
                 myMacro.keyboardInput_combination(
                     'ctrl', 'c')  # Ctrl + c 입력해서 거짓말 탐지기 해제 코드 클립보드에 저장
                 code = clipboard.paste()  # 클립보드에 저장된 거짓말 탐지기 해제 코드 저장
                 code_list = self.distributeHangul(
                     code)  # 거짓말 탐지기 해제 코드의 초성, 중성, 종성 분리해서 리스트에 저장
                 suspend_continue_code_list = self.distributeHangul(
                     self.suspend_continue_code
                 )  # 거짓말 탐지기 오탐 시 현재 작업(거짓말 탐지기 해제 코드 입력하는 작업)을 중지하고 매크로를 다시 재개하는 코드의 초성, 중성, 종성 분리해서 리스트에 저장
                 suspend_continue_count = 0  # 거짓말 탐지기 해제 코드가 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드와 같은지 판단하기 위한 카운트 변수
                 if len(code_list) == 0 or len(
                         suspend_continue_code_list
                 ) == 0:  # 거짓말 탐지기 해제 코드 또는 매크로 재개 코드의 초성, 중성, 종성 분리에 실패했을 경우
                     return False  # 거짓말 탐지기 해제 코드 또는 매크로 재개 코드의 초성, 중성, 종성 분리에 실패했을 경우의 반환
                 if len(code_list) == len(
                         suspend_continue_code_list
                 ):  # 거짓말 탐지기 해제 코드와 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드의 길이가 같을 경우
                     for i in range(
                             0, len(suspend_continue_code_list)
                     ):  # 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드의 길이만큼 반복
                         if code_list[i] == suspend_continue_code_list[
                                 i]:  # 거짓말 탐지기 해제 코드와 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드의 문자가 같을 경우
                             suspend_continue_count += 1  # 카운트 변수 값 증가
                         else:  # 거짓말 탐지기 해제 코드와 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드의 문자가 다를 경우
                             break
                     if suspend_continue_count == len(
                             suspend_continue_code_list
                     ):  # 카운트 변수 값이 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드의 길이와 같을 경우(거짓말 탐지기 해제 코드와 거짓말 탐지기 오탐 시 현재 작업을 중지하고 매크로를 다시 재개하는 코드의 문자들이 모두 일치할 경우)
                         return False  # 현재 작업 중지 및 매크로 재개를 위해 의도적으로 실패 값 반환
                 return code_list  # 거짓말 탐지기 해제 코드의 초성, 중성, 종성이 저장된 리스트 반환
             exit += 1  # 탈출 변수 값 증가
             time.sleep(1)  # 부하를 줄이기 위한 딜레이
         return False  # 거짓말 탐지기 해제 코드를 전송받지 못했을 경우의 반환
     except Exception, e:
         self.statusBar.showMessage('[-] Error : ' + str(e))  # 상태 표시줄 내용 갱신
         return False  # 거짓말 탐지기 해제 코드를 전송받지 못했을 경우의 반환