본문 바로가기

코딩13

조건부 실행 (흐름제어) 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.
상수,변수 상수 변하지 않기때문에 상수. 예)숫자 문자열 등등 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.
키 기록부분 구현 및 자동저장 - 쓰레드 생성 # 백그라운드 쓰레드 구축(레코딩 프로그램에 들어감) 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.
Gradient descent(경사하강법, 경사하강알고리즘) - 텐서플로우(tensorflow) 경사 하강 알고리즘, 경사 하강법 Cost(W,b)의 값을 최소화 하는 W,b값을 구함. import tensorflow as tf x_data = [?, ?, ?, ?, ?] y_data = [?, ?, ?, ?, ?] with tf.GradientTape() as tape: hypo = W * x_data + b cost = tf.reduce_mean(tf.square(hypo - y_data)) W_grad, b_grad = tape.gradient(cost, [W,b]) with tf.GradientTape() as tape: Gradient(기울기) Tape(기록) 이후 tape에 gradient메서드를 실행하여 cost에 대한 W와b의 편미분 값을 tuple로 전달. learning rate .. 2020. 5. 20.
기획 키보드 입력을 기록하는 keyloger만들기 1. gui는 qt를 이용 2. 키입력 레코딩은 keyboard 모듈 사용 3. 메인 프로그램 - 레코딩 프로그램 - 뷰어 프로그램 4. 키 입력시 활성화 되어있는 창 이름과 프로세스 이름 얻어오기 및 저장 5. pickle 모듈로 레코딩 데이터 이진파일로 저장 [메인 프로그램] 레코딩 프로그램과 뷰어 프로그램을 선택하여 실행할수 있도록 제작. (필수아님. 각각 프로그램으로 만들어도 될듯) [레코딩 프로그램] gui가 필요없지만 종료등의 편의를 위해 gui제작. 프로그램 실행시 자동으로 레코딩 시작. 일정 시간마다 레코딩 종료후 pickle모듈로 저장 및 레코딩 재실행 프로그램 종료시 진행중인 레코딩종료 및 저장 [뷰어 프로그램] pickle모듈로 저장된 이진.. 2020. 5. 20.