Python/2.7 information

python win32api

qkqhxla1 2015. 1. 13. 20:08

파이썬에서 win32api함수들을 쓸 수 있음. 쓸수 있는건 알았는데


공식 홈페이지에서도 예제코드가 없어서 어떻게하는지 한참 해매다가.... 


삽질로 대충 사용법을 깨달았다.


1. 내가 가장 많이 쓸 함수인 keybd_event함수는 다른 c#이던 c++이던 거기서 쓰는 keybd_event함수와 사용법이 동일하다. 인자 순서도 같고, 인자값도 같다.


2. 가상 키 코드표 http://lab.cliel.com/entry/%EA%B0%80%EC%83%81-Key-Code%ED%91%9C 만 참조하면 키보드 입력은 거의 다 된다. ctrl+c같은 조합키도 된다


3. 또다른 많이 쓸 함수인 mouse_event도 나머지 언어의 api하고 다 같다. mouse_event함수의 두,세번째 인자는 현재의 마우스 커서 위치에서 x,y축으로 이동시킬 양이다.(상대적으로 이동 절대적 좌표이동이 아님.)


4. 아래 코드에는 단순히 마우스, 키보드 입력에 대한 예만 적어놨지만 웹 브라우저 창 열어서 가장 앞으로 끌어오기 등등 기능도 지원한다. http://blog.naver.com/lsh486love/30179973514


아래는 삽질하다가 가져온 코드....  



# -*- encoding: cp949 -*-
import win32api, win32con, time, threading

def click(x,y): 
    global a
    win32api.SetCursorPos((x,y)) 
    #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0) 
    #win32api.mouse_event(win32con.MOUSE_MOVED, 100, 0, 0, 0) #첫번째인자 : x축 이동할 양., 두번째인자 : y축 이동할 양. 세번째,네번째는 0으로 놔둘것.
    #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0) 
    win32api.keybd_event(0x30,0,0,0) #숫자 0 누르기.
    win32api.keybd_event(0x0d,0,0,0) #엔터키 누르기. keybd_event는 다른곳에서 쓰는 api랑 똑같으므로 찾아보면 나옴.
    #ex) http://lab.cliel.com/entry/%EA%B0%80%EC%83%81-Key-Code%ED%91%9C

def input():
    a = raw_input('입력')
def key():
    click(300,300)

threading.Thread(target=input,args=()).start()
threading.Thread(target=key,args=()).start()



이걸 공부하면서 이런 비효율적이고 쓸때없는 생각을 한번 해보았다. http://qkqhxla1.tistory.com/137

문제가 버튼 빨리 누르기인데 저때는 당연히 효율적인 요청 보내기로 풀었었다. 그럼 이번에 공부했던

저수준 함수들을 사용하여 '진짜 마우스로 빨리 버튼을 눌러본다면?' 심심해서 이것도 한번 구현해보았다.


말 그대로 '진짜 빠르게 클릭' 을 구현해서 성공했다.. 심심해서 한번 해봤는데 괜했다.

%내 노트북의 모니터 좌표 기준이므로 해보려면 알아서 좌표를 바꿔야 한다.

쉬는 시간도 내 노트북 인터넷 속도 기준이므로 알아서 바꾸길.


# -*- encoding: cp949 -*-
import win32api, win32con, time
time.sleep(0.5) #잠시 쉬었다가...
win32api.SetCursorPos((600,450)) #문제를 클릭하는쪽으로 마우스를 옮겨준다! 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 600, 450, 0, 0) # 문제를 클릭하고
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 600, 450, 0, 0) 
time.sleep(0.3) #문제가 열리고나서 잠시 쉬었다가...
for i in range(2500): #휠을 아래로 내린다
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 200, 200, -1, 1) 
time.sleep(0.01) #휠 내림을 조절할 잠깐의 시간
win32api.SetCursorPos((800,480)) #그다음 yes버튼으로 바우스를 옮겨준다
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 800, 480, 0, 0) #yes버튼을 알아서 클릭한다.
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 800, 480, 0, 0) 


'Python > 2.7 information' 카테고리의 다른 글

rarfile module ( DareYourMind programming 3 )  (0) 2015.01.23
beautifulsoup  (0) 2015.01.14
유니코드, christmasctf a letter to her 500, los xavis  (0) 2015.01.02
winpexpect ( ftz level5 )  (0) 2014.12.27
pytesser모듈.  (0) 2014.12.19