Python/2.7 information

(나중 참고용) 캡쳐 프로그램, 후킹모듈 기본

qkqhxla1 2015. 6. 6. 12:05

pyHook : https://pypi.python.org/pypi/pyHook


pywin32 : http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/


http://k1rha.tistory.com/432


원래의 목적은 미리 실행시키고 포커스가 해당 cmd에서 떨어져도 스페이스바를 누르면 캡쳐가 되고, 해당 캡쳐화면은 내가 지정한 폴더 내부에 저장하는것이다. 종종 빠른 시간 내에 사진을 찍어서 전송할 일이 있다. 


매번 스마트폰으로 사진을 찍고(내 화면을 찍음.) 하는게 매우 귀찮고, 또 느려서 전역적으로 후킹을 해서 스페이스바가 눌렸으면 현재 화면을 캡쳐하고, z를 두번 누르면 해당 캡쳐폴더를 압축해놓는게 프로그래밍의 목표였는데.... 일단 캡쳐까지만 구현했고 작동은 잘 한다.


그런데 내가 원래 사용하려 했던 목적인 어떠한 프로그램 내부에서는 해당 프로그램이 후킹을 막아버리는지 아무리 스페이스바를 눌러도 인식을 못한다. 지금 생각해보니 그래도 상업적인 프로그램이니 기본적인 후킹 정도는 다 막아버렸을것이다. 리버싱이나 win api에 관한 지식은 완전 초보라서 이 이상은 진도를 나가기가 힘들것 같다. 나름 시간을 들였는데 허무하다. 나중에 고수되면 다시 해봐야지....


나중에 그래도 쓸일 있을것 같아서 참고용으로 놔둠.


# -*- encoding: cp949 -*-
import os, sys
import pyHook
import pythoncom
import winsound
import pyscreenshot as ImageGrab
import subprocess
import getpass
import zipfile

cnt = 0; zip = 0
def OnKeyboardEvent(event):
    global cnt, zip, file_path
    event = str(chr(event.Ascii))
    if event==' ': #스페이스바를 입력하면 해당 폴더에 스샷을 찍어서 보관
        im = ImageGrab.grab().save(file_path+'\\%d.png' %cnt)
        zip = 0; cnt += 1 
        winsound.PlaySound("SystemAsterisk", winsound.SND_ALIAS)
    elif event=='z':
        zip += 1
        if zip==2:
            winsound.PlaySound("SystemExit", winsound.SND_ALIAS)
            zip = 0
            #z버튼을 두번 누르면 압축 해야되는데 압축하는거 귀찮아서 개발 안함....

    return True
while True:
    file_path = raw_input('스샷을 저장할 폴더를 끌어오세요. \n아무것도 입력 안할 시 디폴트로 바탕화면의 \'스샷\'폴더에 저장됩니다. : ').strip()
    if file_path=='':
        cmd = subprocess.Popen('mkdir C:\\Users\\'+getpass.getuser()+'\\Desktop\\스샷', shell=True, stderr=subprocess.PIPE) 
        file_path = 'C:\\Users\\'+getpass.getuser()+'\\Desktop\\스샷'
        break
    elif not os.path.isdir(file_path):
        print u'올바른 폴더가 아닙니다! 다시 끌어오거나 입력하세요'
        continue
    break

if __name__ == '__main__':
    print u'\n스페이스바를 누르면 해당 폴더에 스샷을 찍어서 저장합니다.'
    hm = pyHook.HookManager()
    hm.KeyDown = OnKeyboardEvent
    hm.HookKeyboard()
    pythoncom.PumpMessages()