NGMsoftware

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

    학습


    C# C# .NET 매크로 프로그램 만들기. (상태 처리 방법 2부)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 상태 처리 방법을 좀 더 다이나믹하게 테스트 해보도록 하겠습니다. 우선, 이전 시간에 알아본 내용처럼 스크립트의 상태를 체크하고, 상태 체크 값을 비교해서 중지된 상태라면 다시 실행할 수 있도록 해야 합니다. 이 시나리오를 수행하기 위해서는 상태 값을 비교할 수 있는 텍스트 체크 액션이 필요합니다. 아래와같이 모델을 만들었는데요. 하는김에 숫자 체크 액션도 같이 만들었습니다.

    o4QjkpD.png

     

     

    체크 액션들은 모두 동일한 속성을 가져야 합니다. LeftValue와 RightValue인데요. 좌항과 우항의 값을 비교 체크하는 것이기 때문에 이 둘은 무조건 속성으로 가져야 합니다. 그렇다면, 체크 관련 액션들이 하나가 아니기 때문에 중복 코드를 생산할 필요가 없을겁니다. 따라서, 이미지 모델과 마찬가지로 체크 모델도 Base가 되어야 합니다. 모든 체크 모델은 아래 모델을 상속 받아서 구현해야 합니다.

    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Drawing.Design;
    
    namespace Ai.Model.Action.Condition
    {
        [Serializable]
        public class CheckModel : BaseModel
        {
            [LocalizedCategory("Action")]
            [LocalizedDisplayName("LeftValue")]
            [LocalizedDescription("LeftValue")]
            [Browsable(true)]
            [DefaultValue(false)]
            [EditorAttribute(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string? LeftValue { get; set; }
    
            [LocalizedCategory("Action")]
            [LocalizedDisplayName("RightValue")]
            [LocalizedDescription("RightValue")]
            [Browsable(true)]
            [DefaultValue(false)]
            [EditorAttribute(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string? RightValue { get; set; }
        }
    }
    

     

    텍스트 체크 모델은 비교 옵션 하나를 필수로 제공해야 합니다. 왼쪽 값과 오른쪽 값을 비교할 때 어떤 방식을 사용할지 결정해야 하기 때문입니다. 기본값은 Equals입니다.

    [Category("Action")]
    [LocalizedDisplayName("TextCheckOption")]
    [LocalizedDescription("CheckOption")]
    [Browsable(true)]
    [DefaultValue(typeof(Ai.Definition.TextCheckOption), "Equals")]
    public Ai.Definition.TextCheckOption CheckOption { get; set; } = Definition.TextCheckOption.Equals;

     

    로직은 매우 간단합니다. 비교 옵션에 따라서 닷넷의 기본 기능을 활용해서 처리하고, 반환하면 됩니다.

    try
    {
        switch (CheckOption)
        {
            case Definition.TextCheckOption.Empty:
                ConditionResult = string.IsNullOrEmpty(leftValue) && string.IsNullOrEmpty(rightValue);
                break;
            case Definition.TextCheckOption.LeftEmpty:
                ConditionResult = string.IsNullOrEmpty(leftValue);
                break;
            case Definition.TextCheckOption.RightEmpty:
                ConditionResult = string.IsNullOrEmpty(rightValue);
                break;
            case Definition.TextCheckOption.StartWith:
                ConditionResult = leftValue.StartsWith(rightValue);
                break;
            case Definition.TextCheckOption.EndWith:
                ConditionResult = leftValue.EndsWith(rightValue);
                break;
            case Definition.TextCheckOption.Contains:
                ConditionResult = leftValue.Contains(rightValue);
                break;
            default:
                ConditionResult = leftValue == rightValue;
                break;
        }
    }

     

    추가해야 할 코딩은 얼마 되지 않을뿐더러 매우 간단합니다. 에디터를 실행하고, 아래와 같이 구성했습니다. state 변수는 실행한 서브 스크립트의 상태 값을 저장합니다.

    uBCF6hE.png

     

     

    스크립트를 동기 모드로 실행하기 때문에 텍스트 체크에서 비교한 후 무조건 다시 실행되게 됩니다.

    99jAEWj.png

     

     

    이전 글에서 플레이스홀더 기능을 만들었기 때문에 이 기능을 사용해봤습니다. 그리고, Stop 상태인지 비교하기 때문에 서브 스크립트가 중지상태라면 실행하도록 했습니다.

    y9JfNgn.png

     

     

    매크로를 실행하면, 서브 스크립트가 실행됩니다. 동기 모드라서 서브 스크립트가 완료된 후 상태 값을 저장하기 때문에 무조건 한번 더 실행하게 됩니다.

     

     

    만약, 서브 스킯트를 비동기 모드로 실행하면 바로 아래에 있는 상태에는 실행중으로 저장됩니다. 그러면, 텍스트 체크에서 Stop과 값이 달라서 False가 됩니다.

     

     

    스크립트의 상태에 따라서 중지하거나 실행하는 시나리오를 테스트 해봤습니다. 내용은 간단하지만, 막상 구현하려면 어려운 부분들이 한둘이 아닐겁니다. 그렇더라도 동작해야 할 프로세스를 머리속으로 정리한 후 시나리오에 맞게 액션들을 구성해보세요. 프로그래머나 일반인이나 특별히 다를건 없습니다. 얼마나 많은 액션들을 알고 있느냐와 어떻게 응용할것인가를 고민하는건 동일합니다. 프로그래머도 다양한 언어를 학습하고, 사용해봐야 더 좋은 코드를 작성할 수 있거든요.

     

    처음 매크로 프로그램에 입문하시는 분들도 마찬가지 입니다. 귀찮더라도 꼼꼼하게 도움말을 읽어보고, 하나씩 동작을 눈으로 확인하면서 프로세스를 쌓아 나간다면 얼마든지 업무 자동화 매크로 프로그램을 제작할 수 있습니다. 다만, 제작에 너무 많은 에너지를 낭비하는건 좋지 않다고 생각합니다. 기본적으로 해야 할 생업이 존재하고 취미로 하시는 경우에는 마음의 여유를 가지고, 천천히 하나씩 만들어 나가는게 더 중요합니다^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.