Type Here to Get Search Results !

03 Go언어:HWP자동화: 한컴 오토메이션 보안승인모듈

지금까지 Go언어로 한글 HWP를 다룬 것이라고는 새 문서창을 띄우는 것이 전부였지만, 앞으로는 새 문서뿐만 아니라 저장된 문서를 열고 작업을 해야할 수 있습니다. 그런데 새 문서를 만들 때는 문제가 없지만 기존 문서를 불러오면 다음과 같은 문구 및 창이 뜨곤 합니다. 

"ᄒᆞᆫ글을 이용하여 위 파일에 접근하려는 시도(파일의 손상 또는 유출의 위험 등)가 있습니다. 정상적인 작업 과정에만 접근을 허용하십시오"


위와 같은 창이 뜨면, "접근 허용" 또는 "모두 허용"을 선택하면 되긴 합니다. 

작업하는 HWP 파일이 한두개 정도 밖에 되지 않는다면 위와 같은 창을 봐도 별 느낌이 없을 겁니다. 그런데 지속적으로 수십 번, 수백 번 반복하는 작업마다 저 창이 뜨면 상당히 성가신 문제가 됩니다.

앞으로 작업을 하기 위해서는 먼저 이 문제를 해결을 해야 합니다. 이를 위해 이미 한컴디벨로퍼 개발가이드에는 보안승인모듈을 제공하고 있습니다.
(링크: https://developer.hancom.com/hwpautomation)


한컴디벨로퍼 개발가이드에서 보안승인모듈.zip 파일을 다운로드 받습니다. 압축을 풀면 다음과 같이 파일과 폴더가 있습니다.

압축을 푼 폴더 전체를 그냥 HWP가 설치된 위치로 복사해줍니다. 저의 경우 경로는 다음과 같습니다.
  • C:\Program Files (x86)\Hnc

복사할 경로는 동일할 필요는 없습니다. 제 경우는 다운로드 폴더에 두면 실수로 쉽게 삭제할 것 같아 옮겨 놓았을 뿐입니다.


윈도우키+R 을 눌러 실행을 활성화 시키고, "regedit"를 입력하여 확인을 누릅니다. 레지스트리 편집을 실행하는 겁니다. 


한컴 HNC의 레지스트리 위치가 조금씩 차이가 있을 수 있습니다.

저의 경우, 다음과 같은 위치를 찾아 갔습니다.
  • 컴퓨터\HKEY_CURRENT_USER\Software\HNC\HwpAutomation\Modules
경우에 따라 조금 차이가 있을 수 있고, HwpAutomation이 처음에 없는 경우도 있을 수 있습니다. 없는 경우에는 "새로만들기>키"로 만들어 주시면 됩니다.

아무튼 위의 경로로 찾아갔으면, "(기본값)" 밑에서 마우스 우클릭, "새로만들기(N)>문자열 값(S)"으로 값을 추가합니다. 아래는 추가한 것을 편집하는 창입니다.

  • 값 이름(N)은 어떻게 하든 상관없지만, 그 값의 이름을 Golang 소스 코드에 넣어 사용할 것이기 때문에 아주 엉뚱하지 않으면 됩니다. 제 경우에는 "FilePathCheckerModuleExample"로 했습니다.
  • 값 데이터(V)는 앞서 옮겨놓았던 폴더에 있었던 "FilePathCheckerModuleExample.dll"을 선택합니다.

이제 보안승인모듈 등록은 끝났습니다. Golang으로 한글 오토메이션 코드를 작성할 때, 한 줄만 추가하면 됩니다. 일단 아래 코드는 기존과 동일 합니다.

package main

import (
	gohwp "gohwp_dev/gohwp_dev"
)

func main() {
	hwp := gohwp.Initialize()
	defer hwp.UnInitialize()
	hwp.ShowWindow(true)
	hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample")
}
위 코드에서 main함수 마지막 줄에 다음과 같은 한 줄이 있습니다.
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample")
"FilePathCheckDLL"는 똑같이 쓰시고, "FilePathCheckerModuleExample"은 앞서 보안승인모듈 등록에서 값 이름으로 썼던 것을 입력하시면 됩니다.
이제는 HWP파일을 열게 되었을 때 보안 관련 팝업 창이 나타나지 않게 됩니다.

이 아래의 글은 gohwp package 배포  이전에 작성되었던 글로 기록 차원에서 남겨둡니다. 윗 코드만 참조하시고 아래 코드들은 무시하셔도 됩니다.

package main

import (
	"github.com/go-ole/go-ole"
	"github.com/go-ole/go-ole/oleutil"
)

func main() {
	// OLE 시스템 초기화
	err := ole.CoInitialize(0)
	if err != nil {
		panic(err)
	}
	defer ole.CoUninitialize()

	// HWP COM 객체 생성
	hwpCom, err := oleutil.CreateObject("HWPFrame.HwpObject")
	if err != nil {
		panic(err)
	}
	defer hwpCom.Release()

	// IDispatch 요청 및 반환
	hwp, err := hwpCom.QueryInterface(ole.IID_IDispatch)
	if err != nil {
		panic(err)
	}
	defer hwp.Release()
    
        hwp.CallMethod("RegisterModule", "FilePathCheckDLL", "FilePathCheckerModuleExample")
}

위 코드에서 main() 함수 끝나기 전 마지막 줄, hwp라는 IDispatch를 만들어 준 다음에 아래와 같은 한 줄의 코드가 있습니다.

hwp.CallMethod("RegisterModule", "FilePathCheckDLL", "FilePathCheckerModuleExample")

CallMethod 메소드가 등장했습니다. GetProperty, PutProperty와 함께 HWP 자동화 하는 내내 사용되는 메소드입니다. CallMethod는 함수를 실행하는 것이라 생각하시면 됩니다.
CallMethod 메소드로 RegisterModule란 함수를 실행하였고, 함수 인자로 "FilePathCheckDLL", "FilePathCheckerModuleExample"을 던져주었습니다. 이때 가장 마지막에 입력한 것이 앞서 레지스트리 편집 때 "값 이름"이었습니다.

앞으로 Golang으로 한글 HWP 자동화 코드를 작성할 때, 마지막에 언급한 한 줄만 넣어주면 처음 보았던 팝업 창은 다시 볼 일은 없습니다.

댓글 쓰기

0 댓글
* Please Don't Spam Here. All the Comments are Reviewed by Admin.