본문 바로가기
Python/Python_Project | 키로거 및 뷰어

뷰어 프로그램 기능구현, 드래그 앤 드롭 사용

by Pig_CoLa 2020. 5. 20.
SMALL
# 뷰어 프로그램 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()

    # 드래그한 무언가가 놓아졌을때(드래그이벤트가 거절되지 않아야 작동한다)
    # 
    def dropEvent(self, e):
        self.keylogview(e.mimeData().text()[8:])
        self.tb.setText(self.key)

    # 데이터에 주소가 있으나 올바르지 않다면 빈 리스트 []를 리턴
    def _open(self,f:str):
        try:
            with open(f,'rb') as mydata:
                data = pickle.load(mydata)
        except:
            data = []
        return data

    # 빈 리스트를 받아왔다면 잘못된 입력이라고 출력.
    # 정상적인 리스트 데이터라면 아래의 표시방법에 따라 출력
    # (title에 창이름과 프로세스 이름이 있는 win_title을 넣어주고
    # 직전 타이틀과 비교하여 같은곳인지 판단.
    # 동일한곳이 아니라면 새로 바뀐곳의 title을 출력하고 첫 입력시간 출력
    def keylogview(self,f):
        key_str = ''
        title = None
        if self._open(f) == []:
            key_str = '잘못된 입력입니다.'
        else :
            for i in self._open(f):
                if i.event_type == 'down':
                    try:
                        if title == None:
                            title = i.win_title
                            key_str += i.win_title + '\n' + '({}년 {}월 {}일 - {}시{}분{}초)\n'.format(*list(time.localtime(i.time))[:6])
                        elif title != i.win_title:
                            title = i.win_title
                            key_str += '\n\n' + i.win_title + '\n' + '({}년 {}월 {}일 - {}시{}분{}초)\n'.format(*list(time.localtime(i.time))[:6])
                        if len(i.name) == 1:
                            key_str += i.name
                        else:
                            key_str += ' [' + i.name + '] '
                    except:
                        continue
        self.key = key_str

LIST

댓글