아이우에오
40
2019-07-26 19:23:18
0
87

mfc hwnd에 메세지를 보내서 Edit 클래스를 가진 윈도우의 텍스트를 받아오고 싶습니다. with python



빨간 줄로 표시한 부분이 제가 가져오고 싶은 텍스트 부분 입니다.


Spy++로 확인을 해봤는데요

텍스트 부분의 부모 윈도우는 #32770 (Dialog) 클래스구요

텍스트 부분은 Edit 클래스로 확인이 됩니다.


statText = win32gui.FindWindowEx(hwnd2nd, None, 'Edit', None)

위 코드와 같이 FindWindowEx로 해당 자식 hwnd를 찾아서 GetCtrlID로 확인 한 결과

Spy++에서 보이는 ID와 일치 합니다.


텍스트를 가져오고 싶은 hwnd를 정확히 찾았는데

#32770 (Dialog) 의 예하 윈도우에서는 GetClassName 함수도 안먹히고

제가 가져오고 싶은 텍스트 윈도우만  GetWindowText 함수가 반환을 안합니다...

노란색으로 가둔 부분이 해당 부분입니다.

Close와 Scanning completed라는 윈도우 캡션이 잘 반환이 되었습니다.

Spy++로 캡션을 복사 해봤는데요


Total time: 15.71 sec

Average time per host: 0.06 sec


IP Range

***.***.***.*** - ***.***.***.***


Hosts scanned: 254

Hosts alive: 0


이런식으로 개행이 되어있고 길게 구성 되어있습니다.

시도 해본 코드들 입니다.

import win32gui
import win32con
import pywintypes
import struct


    #################
    win32gui.SendMessage(statText, win32con.EM_GETLINE, 0, savestring)
    print(savestring)

    win32gui.SendMessage(statText, win32con.EM_GETLINE, 1, savestring)
    print(savestring)

    ################
    savestring = win32gui.SendMessage(statText, win32con.EM_GETLINE, 2, savestring)
    print(savestring)
    ################
    savestring = win32gui.SendMessage(statText, win32con.EM_GETLINE, 2, 1024)
    print(savestring)


    #############

    # bufferlength = struct.pack('i', 255)
    # linecount = win32gui.SendMessage(statText, win32con.EM_GETLINECOUNT, 0, 0)

    # for line in range(linecount):
    #     linetext = bufferlength + "".ljust(253)
    #     linelength = win32gui.SendMessage(statText, win32con.EM_GETLINE, line, linetext)
    #     a.append(linetext)
    # for i in a:
    #     print(i)

더 있지만 코드가 난잡하고 부끄러워서 못올립니다 하하 이것도 무식하게 짜긴했는데
그냥 mfc에 맞는 환경으로 짜면 될걸
파이썬으로 해가지고 더 고생하는지... 바보인가봐요
고수님들 도와주세요 이틀째 삽질했어요 ㅠㅜㅠ

0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.