본문 바로가기

영웅문Global 핸들링

프로그램 실행 전 준비 (실행 중인 영웅문Global 연결하고 "모든창 닫기")

728x90

앞으로 영웅문Global을 내 맘처럼 핸들링 하기 위해서 사전에 준비해야 할 내용이 있습니다. 그 것은 바로 실행 중인 영웅문Global을 찾고 핸들링 할 수 있도록 연결하는 작업을 하는 것입니다. 더 나아가 영웅문Global 프로그램의 영역을 간단히 설명하고 우리가 핸들링 할 영역을 찾아오는 방법을 설명하겠습니다. 마지막으로 파이썬으로 영웅문Global 핸들링 하기 1번 실습인 "모든창 닫기"를 수행해보겠습니다.

1. 영웅문Global 수동 로그인

영웅문Global을 수동으로 로그인 해줍니다. 로그인해서 들어가면 다음과 같은 화면이 나옵니다.

키움증권에서 우리에게 알려주고 싶은 것이 너무 많습니다. +_+

 

2. 영웅문Global 영역 설명

영역별로 구분을 할 수 있는데 크게 4개로 구분할 수 있습니다.

크게 4개 영역으로 구분해봤습니다.

  • 1번 : 메뉴 : 영웅문Global의 메뉴를 표시해주는 영역입니다.
  • 2번 : 메뉴툴바 : 사용자가 주로 사용하는 메뉴를 설정할 수 있는 영역입니다.
  • 3번 : 화면 : 사용자가 띄운 메뉴가 창으로 띄워지는 영역입니다. (MDI 방식)
  • 4번 : 화면툴바 : 사용자가 몇 개의 창을 띄울 수 있는 영역입니다.

각각의 기능들은 화면 영역에서 마우스 우클릭 후 보이게 하거나 숨길 수 있습니다.

잘 안보이네요.
잘 보이네요.

 

3. 영웅문Global에서 모든창 닫는 방법

저희가 처음으로 핸들링 해볼 영역은 '3번 : 화면 영역'입니다. 이 창들을 닫으려고 하는 이유는 눈으로 잘 보기 위함도 있지만 많은 창이 띄워져 있다면 그 만큼 리소스를 사용하게 되고, 핸들링 할 때 퍼포먼스가 떨어질 수 있기 때문입니다. (그리고 기본적으로 영웅문Global에서도 창을 많이 띄울 수 없습니다. 늘릴 수 있지만 기본제한은 30개 입니다.)

"늘릴테면 늘려봐" 느낌의 무서운 alert창

우선 기본적으로 영웅문Global에서 제공하는 모든창을 닫는 방법과 소스코드로 핸들링해서 닫는 방법을 살펴보겠습니다. (방법이 더 있을 수도 있겠습니다.)

(1) 메뉴를 통한 방법 (메뉴 → 보기 → 모든창 닫기)

마우스로 보기 메뉴를 열어서 모든창들을 닫아줍니다.

(2) 마우스 우클릭 통한 방법 (우클릭 메뉴 → 모든창 닫기)

마우스로 더 심플하게 닫는 방법입니다.

(3) 소스로 화면 영역에 띄워져 있는 창들을 닫는 기능을 동작 시켜 보겠습니다.

프로그램 실행을 통해 모든창을 닫았습니다. 진짜에요.

 

4. 동작시킨 소스에 대한 설명

1회 실행했지만 잘 동작합니다. 바로 모든창 닫기를 소스를 통해 설명해보겠습니다.

def all_windows_close(screen_area):
    for screen in screen_area.children():
        screen.close()

all_windows_close 함수를 만들었습니다. 파라미터로는 screen_area를 넘겨 줍니다. 그리고 screen_area에 있는 모든 자식들을 for문을 돌면서 close() 해줍니다. 끝.

간단한 소스로 영웅문Global의 모든창 닫기를 실행할 수 있습니다.

이 함수를 호출하기 위해서 해야 할 일이 아직 남아있습니다. 적절한 screen_area 찾아서 파라미터로 넘겨줘야 한다는 점입니다. 아래 소스는 앞으로 모든 작업을 하기 전에 수행하게 될 것입니다.

(1) 실행중인 영웅문을 찾기

process_id = 0
for process in psutil.process_iter(['pid', 'name']):
    if process.info['name'] == 'nfrunlite.exe':
        process_id = process.info['pid']
        break

(2) 해당 어플리케이션에 연결하기

app = Application(backend="uia").connect(process=process_id)

앞에서 찾아온 process_id로 어플리케이션에 연결합니다.

 

(3) 메인 윈도우 핸들링하기

main_window = app.window(title='영웅문Global')
main_window.maximize()
time.sleep(1)

어플리케이션에서 메인 윈도우를 title로 찾습니다. 찾은 후 동작하는지 확인하기 위해 영웅문Global을 최대화 했습니다.

 

(4) 화면 영역 찾기

screen_area = None
for child in main_window.children():
    if child.class_name() == "MDIClient": # 작업 영역
        screen_area = child
        break

영웅문Global의 영역 중에서 MDIClient 를 찾아서 가져옵니다.

screen_area를 찾아서 이를 앞서 정의한 함수에 파라미터 설정 후 호출하면 화면 영역의 모든창을 닫을 수 있게 됩니다.

all_windows_close(screen_area)

 

전체 소스는 펼쳐서 확인해주세요.

더보기
import time
import psutil
from pywinauto.application import Application


def all_windows_close(screen_area):
    for screen in screen_area.children():
        screen.close()


# 영웅문 process id 찾기
process_id = 0
for process in psutil.process_iter(['pid', 'name']):
    if process.info['name'] == 'nfrunlite.exe':
        process_id = process.info['pid']
        break

# 실행 중인 어플리케이션에 연결
app = Application(backend="uia").connect(process=process_id)

# 메인 윈도우 핸들링
main_window = app.window(title='영웅문Global')
main_window.maximize()
time.sleep(1)

# 각 자식 컨트롤의 정보 출력
screen_area = None
for child in main_window.children():
    if child.class_name() == "MDIClient": # 작업 영역
        screen_area = child
        break

all_windows_close(screen_area)

앞서서 파이썬이 실행될 수 있도록 package를 설치했다면 이 소스만으로 영웅문Global의 모든창 닫기를 실행할 수 있습니다.

다음 포스팅에서는 영웅문Global을 핸들링하려는 목적인 '매수 / 매도를 수행하는 방법'에 대해 설명 드리겠습니다.

여기까지 내용을 직접 실행해보셨나요? 부족한 점이 있거나 어려운 점이 있다면 언제든지 댓글, 이메일로 문의 주세요. 문의를 주시는데 시간을 쏟으신 만큼 최선을 다해 답변 드리겠습니다.

관심의 표현은 저에게 큰 힘이 됩니다. 😍
도움을 주셔서 정말 감사합니다.

반응형