ROT를 통한 실행중인 한컴을 불러올 때 생기는 오류

임시저장된 파일이 열려 있던 것(.asv)을 닫고 실행하니
오류 메세지 없이 잘 실행 되었습니다.

ROT에 이름이 !HwpObject 로 시작하지만
편집할 수 없는 객체를 따로 선별할 수 있는 방법이 있을까요?

moveright랑 moveleft가 안되면 try 오류가 발생할테니
except예외처리로 넘어가게 할려고 했는데
이게 잘 안먹히는 듯 합니다.

if name == ‘main’:
기존한컴=0
바인딩내용 = pythoncom.CreateBindCtx(0)
실행중객체테이블 = pythoncom.GetRunningObjectTable()
실행중객체이름들 = 실행중객체테이블.EnumRunning()

for 실행중객체이름 in 실행중객체이름들:
    이름 = 실행중객체이름.GetDisplayName(바인딩내용,실행중객체이름)
    if 이름[:10] == '!HwpObject':
        찾은거 = 실행중객체테이블.GetObject(실행중객체이름)
        한컴 = EnsureDispatch(찾은거.QueryInterface(pythoncom.IID_IDispatch))
        try:
            기본=기본(한컴)
            기본.대상.HAction.Run("MoveRight")
            기본.대상.HAction.Run("MoveLeft")
            기존한컴=1
        except:
            한컴 = EnsureDispatch("hwpframe.hwpobject") 
            한컴.XHwpWindows.Item(0).Visible = True 
            기본=기본(한컴)
            기본.문서여백(20,20,15,15,10,10)                
        
if 기존한컴 == 0:
    한컴 = EnsureDispatch("hwpframe.hwpobject") 
    한컴.XHwpWindows.Item(0).Visible = True 
    기본=기본(한컴)
    기본.문서여백(20,20,15,15,10,10)
1개의 좋아요

안녕하세요 ^^
한글 오브젝트에서 읽기전용 과같이 편집이 불가능할때라고 이해하면 될까요 …?

Object XHwpWindows에서 Active_XHwpDocument를 가져온뒤 Edit 모드를 확인하여,

현재 상태가 어떤지 확인해보면 어떨까 싶습니다.

Editmode의 상태값은 다음과 같습니다.

0, 읽기전용
1, 일반 편집모드
2, 양식모드

감사합니다 ^^

1개의 좋아요

죄송합니다. 제가 설명이 부족했습니다.

정확히는
실제 한컴창이 뜨지도 않고, 윈도우 하단 작업표시줄에도 표시가 안되어있지만
프로세스 상에서 남아있는 한컴을
ROT로 잡지 않는 방법이 궁금합니다.

for 실행중객체이름 in 실행중객체이름들:
이름 = 실행중객체이름.GetDisplayName(바인딩내용,실행중객체이름)
if 이름[:10] == ‘!HwpObject’:
찾은거 = 실행중객체테이블.GetObject(실행중객체이름)
한컴 = EnsureDispatch(찾은거.QueryInterface(pythoncom.IID_IDispatch))
try:
기본=기본(한컴) <<<<<<<<<<<<<<< 여기서 에러가 잡힙니다.
기본.대상.HAction.Run(“MoveRight”)
기본.대상.HAction.Run(“MoveLeft”)

1개의 좋아요

안녕하세요 ,
한컴창이 뜨지도 않고, 작업표시줄에도 표시가 되어있지 않다면,
오토메이션 객체로 생성된 HwpObject가 종료되지 않고 프로세스상으로 남아있는것 같습니다.

해당 프로세스는 강제종료 해주면 될것 같아보입니다.
그리고 남아있는 프로세스라면 Visible 상태를 확인하여서 숨어있는것을 확인할수 있지 않을가 싶습니다.

한컴.XHwpWindows.Item(0).Visible = True

라고 인자값을 주신 부분이 있는데
해당 visible 상태가 true 인지 false인지 확인하면 될것 같습니다.
감사합니다 ^^

1개의 좋아요