열려있는 한글프로그램을 인식하지 못합니다.

안녕하세요.
더위가 많이 물러간 것 같아 좋습니다.
이제 또 환절기 건강 걱정할 때가 오겠죠.ㅎ

폼에서 버튼으로 현재 열려 있는 한글 문서에,
버전과 상관없이 컨트롤 하는 명령을 주는 프로그램을 짜서 잘 실행하고 있습니다.

문제는 종종 컴퓨터 환경에 따라,
열려 있는 프로그램을 인식하지 못하는 경우가 발생해서 골치가 아픕니다.
저 같은 경우 같은 윈도우11인데도 가정에서 되는 게 회사에서 안 되고 합니다.
제 프로그램을 이용하는 분들이 제법 있어서
이런 경우 난처하네요.

관리자 권한으로 켰을 때 되는 경우도 있고,
관리자 권한을 꺼냐 되는 경우도 있고,
심지어 어떨 때는 무한루프처럼 명령이 전달될 때도 있습니다.
아주 증세가 다양합니다.

조언 좀 부탁드립니다.

즐거운 주말 되세요.

이 범주에서는 한글 오토메이션에 대한 다른 사용자의 기술 지원을 제공받을 수 있습니다.

  1. 한글 오토메이션의 API 사용/연동은 개발 가이드를 참조하세요.
  2. 일반 문의는 한글과컴퓨터 웹사이트의 고객 지원을 이용하세요.
  3. 개인정보가 포함되지 않도록 유의하세요. 게시글 또는 댓글에 개인정보가 포함된 내용이 있을 경우 게시물이 숨김처리 될 수 있습니다.

안녕하세요.

한글 프로그램 버전마다 ROT를 찾는 이름이 다른데요.
실행 환경에 설치된 한글 버전이 개발 환경과 다른 것은 아닌지 확인해보면 좋을 것 같습니다.

(ROT 관련 게시글)

2010 : “!HwpObject.80.1”
2014 : “!HwpObject.90.1”
NEO : “!HwpObject.96.1”
2018 : “!HwpObject.100.1”
2020 : “!HwpObject.110.1”
2022 : “!HwpObject.120.1”
2024 : “!HwpObject.130.1”

혹은 열려있는 한글 프로그램을 인식하는 방식을 어떻게 구현하셨는지 코드 샘플을 공유해주시면
확인해보겠습니다.

감사합니다.

답변 주셔서 감사합니다. 해당 사항은 이미 다 반영을 했습니다.
말씀하신 코드는 아래와 같습니다.

private IHwpObject GetHwpObject()
{
IRunningObjectTable Rot;
GetRunningObjectTable(0, out Rot);

IEnumMoniker monikerEnumerator = null;
Rot.EnumRunning(out monikerEnumerator);

IntPtr pNumFetched = new IntPtr();
IMoniker[] monikers = new IMoniker[1];

IBindCtx bindCtx;
CreateBindCtx(0, out bindCtx);
string name;

// 정규 표현식을 사용하여 버전에 관계없이 개체명을 찾음
Regex hwpObjectRegex = new Regex(@"!HwpObject\.(80|90|96|100|110|120|130)\.1");

// 대기 시간 추가 (500ms 정도 대기)
System.Threading.Thread.Sleep(500);

while (monikerEnumerator.Next(1, monikers, pNumFetched) == 0)
{
    monikers[0].GetDisplayName(bindCtx, monikers[0], out name);

    if (hwpObjectRegex.IsMatch(name))
    {
        object obj;
        Rot.GetObject(monikers[0], out obj);
        return (IHwpObject)obj;
    }
}

return null;

}

GetDisplayName으로 나올 수 있는 경우가 아래와 같으니
정규식 부분을 수정해보시면 좋을 것 같습니다.

!HwpObject.(Version).X

  • Version : 한글 버전으로 80, 90, 96, 100, 110, …
  • X : 오토메이션 인스턴스의 인덱스로 1 ~ 99 지정될 수 있음

감사합니다.

네. 감사합니다.^^ 모든 경우의 수를 다 넣어보도록 하겠습니다.