반응형

다들 많이들 쓰는 nox...

회사에서 오토로 돌려놓으려니 오토 마우스는 해당 윈도우가 활성화 되어 있어야 하고

최소화는 아니더라도 비활성화 되어 있는건 이미지  캡쳐해서 클릭하고 싶은데

 

이미지 캡쳐가 안된다

 

그럼 뭐? 구글링 해서 만들어야지 뭐

 

일단 현재 캡쳐하려는 녹스윈도우의 핸들이름을 알아야 하니

spy .zip
3.43MB

spy++ 를 사용해서 이름을 찾자(나중에 UI 로 만들어서 선택하도록 해야지..)

압축을 해제한후 spyxx.exe 를 실행

윈도우 서치 버튼을 눌러 나오는 팝업에서 조준선을 드래그하여 확인하려는 윈도우 에 드랍합니다.

가장 최상단의 윈도우 핸들이 필요합니다.

최상단의 윈도우를 우클릭후 'Properties...' 를 클릭하면 상세 정보 화면이 표시 됩니다.

윈도우 캡션의 데이터(3)를 메모해 두고 파이선 작업을 시작합니다.

#-*-coding:utf-8  
#한글 입력을 위한 정의

import win32gui 
import win32ui
#윈도우 핸들을 찾기 위한 라이브러리
#pip install pypiwin32
#anconda환경이라면 conda install -c anaconda pywin32
from PIL import Image
#이미지저장을 위한 라이브러리
#pip install pillow

from ctypes import windll
#윈도우 dll사용을 위한 라이브러리

hwndname ='NoxPlayer3'
hwnd = win32gui.FindWindow(None, hwndname)
if hwnd >=1:
    left, top, right, bot = win32gui.GetWindowRect(hwnd)
    w = right - left
    h = bot - top
    hwndDC = win32gui.GetWindowDC(hwnd)
    mfcDC  = win32ui.CreateDCFromHandle(hwndDC)
    saveDC = mfcDC.CreateCompatibleDC()

    saveBitMap = win32ui.CreateBitmap()
    saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)

    saveDC.SelectObject(saveBitMap)

    result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 0)

    bmpinfo = saveBitMap.GetInfo()
    bmpstr = saveBitMap.GetBitmapBits(True)
    im = Image.frombuffer('RGB',(bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1)
    win32gui.DeleteObject(saveBitMap.GetHandle())
    saveDC.DeleteDC()
    mfcDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, hwndDC)
    
if result ==1: 
    #성공적으로 윈도우 값을 가져왔다면
    im.save("test.png")
    #이미지저장

가려져 있어도 정상적으로 해당 윈도우의 이미지를 가져온다.

최소화 되어 있었다면 아래와 같이 타이틀 바만 저장된다.

성공적으로 test.png로 저장된다.

이제 이미지 서치와 서치한 좌표를 클릭(비활성 클릭)하도록 만들기만 하면된다.

 

나중에 업무 자동화 같은데 사용할수 있겠지?;;; 아마도???

 

반응형

+ Recent posts