NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (프로그램 제목 또는 이름 변경하는 방법)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 프로그램 이름 또는 제목을 변경하는 방법에 대해서 알아보도록 하겠습니다. 일반적으로 프로그램이 실행되면 상단 좌측에 프로그램의 제목이 표시되거나 창 이름이 표시됩니다. 구글 크롬이나 마이크로소프트의 엣지는 이동하는 사이트의 제목이 표시되는데요. 대부분의 윈도우 프로그램은 프로그램명이 표시됩니다. 여기까지는 문제가 없지만, 멀티 다클라 매크로 환경에서 비활성으로 동작하려면 창 제목이 모두 달라야 합니다.

     

    엔지엠 6 버전은 멀티 핸들 처리 기능이 없어서 창 제목이 모두 달라야만 정상 동작합니다. 하지만, 엔지엠 7 (가칭) 버전은 멀티 핸들 기능이 추가되었기 때문에 굳이 창 제목을 변경하지 않더라도 각각의 프로그램을 인식하고, 마우스 클릭이나 키보드 입력 같은 동작을 수행할 수 있습니다. 아래와 같이 프로그램 이름 변경 액션을 하나 만드세요.

    public class AppTitleChangeModel : BaseModel

     

    프로그램을 선택하는 로직은 BaseModel에서 이미 다 만들어져 있기 때문에 이 부분은 건너뛰어도 됩니다. 순수하게 프로그램 제목 변경 기능에 대해서만 개발하면 됩니다.

     

    창 제목이 정상적으로 변경되었는지 확인할 수 있는 Result 속성을 하나 추가해줍니다.

    [LocalizedCategory("Data")]
    [LocalizedDisplayName("Result")]
    [LocalizedDescription("Result")]
    [Browsable(true)]
    [DefaultValue(null)]
    [EditorAttribute(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string? Result { get; set; }

     

    다클라 매크로 환경에서도 사용할 수 있도록 프로그램명 변경과 자동 인덱스 속성을 추가했습니다.

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("AppName")]
    [LocalizedDescription("AppName")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? AppName { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("AppNameAutoIndex")]
    [LocalizedDescription("AppNameAutoIndex")]
    [Browsable(true)]
    [DefaultValue(false)]
    public bool AutoIndex { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("WindowCaptionChangeOption")]
    [LocalizedDescription("WindowCaptionChangeOption")]
    [Browsable(true)]
    [DefaultValue(typeof(Definition.WindowCaptionChangeOption), "Direct")]
    public Definition.WindowCaptionChangeOption ChangeOption { get; set; } = Definition.WindowCaptionChangeOption.Direct;

     

    여러개의 프로그램이 선택된 경우와 한개만 처리하는 경우를 조건으로 구분해서 처리했습니다. 자동 인덱스를 사용하면 프로그램명 뒤에 숫자를 붙여줍니다.

    if (AutoIndex)
    {
        int index = 0;
        foreach (IntPtr mainHandle in MainHandles)
            Result = Ai.Api.Core.User32.SetWindowText(mainHandle, $"{appName} {index++}").ToString();
    }
    else
        Result = Ai.Api.Core.User32.SetWindowText(MainHandle, appName).ToString();

     

    테스트를 위해 메모장을 3개 실행했습니다. 에디터에서 아래와 같이 프로그램 이름 변경 액션의 속성을 설정하세요.

    DYprNgq.jpeg

     

     

    매크로를 실행하면 메모장이 전부 정렬되고, 창 이름도 각각 변경되었습니다.

     

     

    이미 앞에서 다 만들어놓은 기능들의 조합이라서 간단하게 개발을 완료할 수 있었습니다. 어차피 엔지엠 6에서 대부분의 기능 개발이 완료되어 있었고, 새 버전에서는 특별히 추가되는 기능이 아니라면 복사해서 붙여넣기하는 수준입니다. 다만, 디자인이 변경되었기 때문에 구조적인 부분들이 대폭 변경되었습니다. 이전 구조와 현재 구조가 다르기 때문에 디자인 측면에서 수정해야 하는 코드들이 많아졌네요^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.