본문 바로가기

전체 글62

조건부 실행 (흐름제어) if if는 조건문이 참일때만 body를 실행하는 예약어로 매우 자주 사용하게 됩니다. 조건문 뒤에는 콜론 : 이 쓰이고 오는 body부분은 들여쓰기 해줍니다. 뒤오 오는 조건에 구에받지 않아야할 코드는 다시 내어쓰기를 해줍니다. 예시) if 조건문: # body 시작 코드~~~~ ~~~~ 코드 # body 끝 x = 5 if x < 10: print('smaller') print('Fin') # 출력결과 # # smaller # Fin x = 15 if x < 10: print('smaller') print('Fin') # 출력결과 # # Fin 조건문 True 나 False를 (이를 bool타입이라고 한다) 사용하거나 연산결과가 bool타입인(True나 False가 연산결과로 나오는) 연산을 사용한다.. 2020. 5. 21.
연산자, 타입 연산자 수학(math)에서의 연산자와 매우 비슷 수학에서 쓰는 기호 전체를 사용할수 없기 때문에 60~70년대 키보드에 있었던 것을 차용해서 만듬 + 더하기 - 빼기 * 곱하기 / 나누기 ** 제곱 % 나머지 // 몫 연산자의 계산순서 + 나 - 가 아닌 다른 연산자를 먼저 계산후 연산. 두 연산(+,-)을 제외한 연산이 두개 이상 있을경우 먼저 등장하는 순서로 계산. 괄호 안의 연산을 먼저 수행. 계산 우선순위 1 + (2 ** 3)/ 4 * 5 1 + (8 / 4) * 5 1 + (2 * 5) 1 + 10 11 괄호 제곱 곱하기, 나누기 연산 더하기, 빼기 연산 왼쪽에서 오른쪽으로 진행 타입 Python의 기본 데이터 타입은 str(문자열) int(정수형) float(부동소수점) 등이 있음. 타입을 .. 2020. 5. 21.
상수,변수 상수 변하지 않기때문에 상수. 예)숫자 문자열 등등 22.7 5 'hello' 변수 메모리를 할당하고 이름을 지어 무언가를 넣을수 있다. 일반적으로는 하나의 값을 넣게 됩니다.(하나 이상의 값을 변수에 넣을수도 있습니다) a = 22.7 b = 'hello' 와 같은 대입문을 통하여 변수에 값을 넣을수 있다. 이것은 우리마음대로 변수이름을 a로 정하고 22.7이란 상수를 넣어준겁니다. (다른 표현으로는 변수 a가 22.7을 가르키고 있다 라고한다) x = 22.7 y = 5 x = 'hello' print(x,y) # hello 5 22.7이라는 숫자는 바뀔수가 없으나 x가 가르키는 곳은 달라질수가 있습니다. 그렇기에 변수라고 할수있죠. 변수 이름의 규칙 (Python) 변수이름 내에서 문자, 숫자, 언.. 2020. 5. 21.
키로그, 뷰어 프로그램 전체 코드 공유 ### co.la@kakao.com ### ### Pig_Cola ### from PyQt5 import QtWidgets, QtCore import sys,pickle,keyboard,time # 메인 프로그램 UI 및 슬롯 구축 class main(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint,False) self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,False) self.setMinimumSize(178,45) self.pbt1 = QtWidgets.QPushButton('키로거', self) s.. 2020. 5. 20.
뷰어 프로그램 기능구현, 드래그 앤 드롭 사용 # 뷰어 프로그램 UI구축 class viewer(QtWidgets.QWidget): def __init__(self): super().__init__() self.tb = QtWidgets.QTextBrowser(self) self.setAcceptDrops(True) layout = QtWidgets.QGridLayout() layout.addWidget(self.tb) self.setLayout(layout) # 드래그 한 무언가가 올라왔을때 작동 # 무언가에 주소값이 없다면 거절 def dragEnterEvent(self, e): if e.mimeData().urls() == []: e.ignore() else: e.accept() # 드래그한 무언가가 놓아졌을때(드래그이벤트가 거절되지 않아야 작.. 2020. 5. 20.
keyboard라이브러리 수정 키입력시 기록되는 부분을 확인해보면 _keyboard_event 모듈이었습니다. keyboard의 라이브러리 폴더에 있네요. 기본상태의 모듈입니다. win_title이란 변수를 만들어주고 전에 준비한 구문을 def로 둘러 전달할 내용을 return해줍니다. 새로 기록후 다시한번 디버깅을 해서 데이터를 확인해보니 오브젝트 들에게 win_title이라는 변수가 존재함을 확인할수 있었습니다. 이것을 뷰어에서 활요하면 좋을듯합니다. 2020. 5. 20.
활성화된 창이름,프로세스 이름 얻어오기 활성화 된 창의 핸들을 얻어와 창 이름과 프로세스 이름을 출력하는 간단한 구문. 이것을 키보드이벤트의 초기화 함수에 변형후 넣어주면 될거같다. import win32gui, win32process, psutil handle = win32gui.GetForegroundWindow() wintitle = win32gui.GetWindowText(handle) tid, pid = win32process.GetWindowThreadProcessId(handle) process_name = psutil.Process(pid).name() print(wintitle,process_name) 현재 활성화된 창의 handle값을 얻어온후 창이름과 프로세스 이름을 가져온다. 창이름은 핸들로 접근이 가능하며 프로세스 이름.. 2020. 5. 20.
디버그 - 기록된 키입력 데이터 확인 뷰어프로그램을 작성하기전 pickle을 통하여 저장하였던 바이너리 데이터를 불러와 디버그 모드로 자료구조에 대하여 먼저 알아봐야겠어요 키보드이벤트 클래스의 오브젝트들이 리스트에 담겨있네요. event_type이 눌렀을때 down 떼었을때 up이네요. 뷰어는 기록에 대한 재생할 필요가 없으니 down만 확인하면 될거같습니다. name의 경우 누른 키에 대한 문자열이 적혀있는데요 타이핑에 쓰이는 모든 키들은 길이가 1인 문자열로 있는 반면에 비 문자열 키들은 'esc', 'tab'과 같이 길이가 1이 아닌애들만 있네요. 나중에 if len(name) == 1 과같은 함수로 눌린 버튼이 문자열인지 비 문자열인지 판단할수 있을거같습니다. 뷰어 프로그램 기획당시 키가 입력된곳의 창이름,프로세스 이름을 같이 출력하.. 2020. 5. 20.
키 기록부분 구현 및 자동저장 - 쓰레드 생성 # 백그라운드 쓰레드 구축(레코딩 프로그램에 들어감) class _record(QtCore.QThread): def __init__(self,selfs): super().__init__(selfs) self._state = False self.record = [] self.mutex = QtCore.QMutex() self._time = None def run(self): # 쓰레드에서 실행될 구문 while True: self.mutex.lock() if not self._state: self.recording() else: if time.time() - self._time >= 60: # 60초마다 저장한다 self.recording() self.mutex.unlock() def recording(s.. 2020. 5. 20.