본문 바로가기
Software coding skill(python, web등)

pywinauto 11 - 열려있는 어플리케이션 확인

by 호빵님 2020. 2. 19.
반응형

 

열려있는(현재 동작중인) 어플리케이션을 확인하고 작업해야할 일이 있다. 아래 이유들이 있겠다.

 

1. 이미 열려진 어플리케이션에서 계속 누적 작업하는 것이 필요

2. 열려진 어플리케이션 종료 필요

3. 열려진 어플리케이션이 없으면, 실행 필요

 

 

저번에 만든 메모장 예제를 이용해서, 구현을 해보았다.

 

메모장이 열려있나 확인해보고, 없으면 새로 메모장을 열고, 열려있는 메모장이 있으면 글씨를 적고 저장한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# -*- coding: utf-8 -*-
"""
Created on Fri Feb  7 22:15:50 2020
 
@author: kenro
"""
 
from pywinauto.application import Application
import pywinauto
import time
 
# 어플리케이션 모듈 선언
app = pywinauto.application.Application()
 
try :
    app.connect(title_re=u".*메모장.*"#열려진 메모장과 커넥트 시도. 다른 타이틀명들 인식하도록 정규식 사용
    
except :
    app = Application().start("notepad.exe")  # 열려진게 없을때는 Run a target application
 
# 다이얼로그 창 정의
mainWindow = app['Windows 메모장'# main windows' title 제목없음메모장 - 
 
# 파일 이름 입력하는 창에가서 'test.txt' 라고 입력
ctrl=mainWindow['Edit1'
mainWindow.set_focus()
ctrl.click_input()
ctrl.type_keys("test.txt")
 
# 열기 버튼 클릭
#mainWindow.Button1.click()
app.UntitledNotepad.menu_select("파일(&F)->다른 이름으로 저장(&A)...")
 
# '다른 이름으로 저장' 창의 속성을 리스트업 한다.
# app.다른_이름으로_저장.print_control_identifiers()
 
# 파일 full 경로 입력
app.다른_이름으로_저장.Edit1.set_edit_text(r"C:\Users\kenro\Documents\AutoTest\test.txt"#unicode escape를 위해서 앞에r을 쓰거나, \\두번쓰면됨
time.sleep(1.0
# '파일이름' 콤보박스에서 파일 종류 선택
app.다른_이름으로_저장.ComboBox2.select("모든 파일 (*.*)")
time.sleep(1.0
# '파일형식' 콤보박스에서 인코딩 선택
app.다른_이름으로_저장.ComboBox3.select("UTF-8")
 
# 바로 저장 버튼을 누르면 미처 콤보 박스가 안 바뀌어 에러가 나서 1초 시간 줌
 
time.sleep(1.0)
 
# 저장 버튼 누름
app.다른_이름으로_저장.Button1.click()
 
#같은 이름 있다는 에러창이 나오면 클릭
app.다른이름으로저장확인.Button1.click()
cs

 

 

첫 실행시 메모장이 켜지고, 위 글자치고, 저장함

 

 

두번째 실행시, 열려있는 메모장에 뒤에 이어서 적고 저장

 

 

아래는 열려진 메모장이 있으면, 닫아버리고 다시 새 메모장을 열어서 작업을 하는 코드 예제이다. 위 코드의 상단의 try, except구문을 아래와 같이 구현하면 된다.

1
2
3
4
5
6
7
8
9
10
11
# 어플리케이션 모듈 선언
app = pywinauto.application.Application()
 
try :
    app.connect(title_re=u".*메모장.*"#열려진 메모장과 커넥트 시도. 다른 타이틀명들 인식하도록 정규식 사용
    app.kill() # 커넥트 성공하면 여기서 어플리케이션 프로세스 종료 시킴
    time.sleep(1.0
    app = Application().start("notepad.exe")  # 다시 Run a target application
    
except :
    app = Application().start("notepad.exe")  # 열려진게 없을때는 Run a target application
cs

 

 

열려진 메모장 종료 후, 다시 메모장 실행됨

 

반응형