안녕하세요.
이전에 HwpObject 자동화에서 FilePathCheckDLL 등록 관련 문의를 드렸고,
답변해 주신 내용을 기준으로 다시 점검했습니다.
■ 환경
- 한글 2022 (Hwp.exe 12.0.0.4204, 32비트)
- Windows 11 (10.0.26200)
- 호출: Python 3.13.7 (64비트) + pywin32, HWPFrame.HwpObject
- 호출 방식
RegisterModule(“FilePathCheckDLL”, “FilePathCheckerModuleExample”)
두 번째 인자는 DLL 파일명이나 경로가 아니라 레지스트리에 등록한
값 이름을 사용하고 있습니다. 객체 생성 직후, 어떤 파일도 열기 전에
호출합니다.
- 레지스트리
HKEY_CURRENT_USER\Software\HNC\HwpAutomation\Modules
FilePathCheckerModuleExample REG_SZ C:…\FilePathCheckerModuleExample.dll
배포 ZIP에 포함된 공식 레지스트리 예제와 동일한 구조입니다.
같은 키에 예전에 다른 프로그램이 남긴 값이 하나 더 있습니다.
FilePathCheckerModule REG_SZ C:\Program Files\ShopShopWord…(파일 없음)
해당 파일과 폴더는 존재하지 않습니다. 이 값이 영향을 줄 수 있다면
알려주시면 삭제하겠습니다.
- DLL
- 한컴 배포본 FilePathCheckerModuleExample.dll 사용
- 배포본과 설치본 SHA-256 동일
- 32비트(x86), 사용 중인 Hwp.exe도 32비트
- Zone.Identifier 없음 (차단 아님)
- DLL 경로 실제 존재
-
계정
레지스트리를 등록한 계정과 한글/HwpObject를 실행하는 계정은 동일합니다. -
관찰된 현상
- 모듈 이름을 정확히 넘기면 False 가 반환됩니다.
- 그런데 두 번째 인자에 빈 문자열(“”)을 넘기면 True 가 반환됩니다.
이름으로 조회하는 단계에서 실패하는 것으로 보입니다. - Dispatch / DispatchEx / gencache.EnsureDispatch 세 방식 모두 결과가 같습니다.
- RegisterModule 이 False 인 상태에서도 문서 열기와 InsertPicture 는
실제로 동작하며, 승인창은 간헐적으로만 나타납니다.
- Modules\Uses 관련
이전 답변에서 “Modules\Uses 값이 0이 아닌지” 확인하라고 안내해 주셔서
조사했습니다. 그런데 이 PC에서는 아래 키가 모두 존재하지만
Uses 아래에는 값이 하나도 없습니다.
HCellAutomation\Modules\Uses
HShowAutomation\Modules\Uses
HwpCtrl\Modules\Uses
HwpUserAction\Modules\Uses
HwpAutomation\Modules\Uses
배포 ZIP의 공식 레지스트리 예제(레지스트리.JPG)에도 Modules 아래에는
하위 키가 없고, Uses 등록 예시도 없습니다.
따라서 다음을 확인 부탁드립니다.
- HwpAutomation\Modules\Uses 에 별도로 등록해야 하는 값이 실제로
존재하는지 - 존재한다면 값 이름 / 형식(REG_DWORD 등) / 데이터 / 정확한 등록 예시
- Uses 가 빈 상태가 정상이라면, 현재 조건에서 RegisterModule 이
False 를 반환할 수 있는 추가 점검 항목 - 빈 문자열일 때만 True 가 반환되는 것이 정상 동작인지, 아니면
이름 조회 실패를 뜻하는지 - RegisterModule 이 False 를 반환하는 원인을 확인할 수 있는
로그나 진단 방법 - DLL 을 특정 폴더에 두어야 하는 요구사항이 있는지
(현재는 절대 경로로 REG_SZ 등록) - DLL 로딩 실패 여부를 확인할 수 있는 방법
- 한글 2022 에서 이 등록 방식이나 키 위치가 달라졌는지
현재 공식 예제와 동일하게 구성했음에도 RegisterModule 은 계속 False 를
반환하고 있습니다.
승인창을 자동 클릭하거나 보안 설정을 우회하지 않고, 공식 방식으로
정상 등록하고 싶습니다.
확인 부탁드립니다.
감사합니다.