본문 바로가기
키보드 매크로

C# .NET 매크로 프로그램 만들기. (매크로 중지 2부)

by 업무자동화 2024. 4. 16.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #엔지엠에디터 #엔지엠플레이어 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화

 

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 이전 시간에 클라이언트(에디터, 플레이어)에서 실행중인 매크로를 중지하는 방법을 알아봤는데요. 오늘은 스크립트 중지 액션을 만들어 볼께요. 아마도, 다음 시간에는 실행중인 스크립트를 일시 중지하는걸 만들거 같네요. 일단 스크립트를 제어하는 모델들을 모두 추가해놓고, BaseModel에 스크립트를 선택할 수 있도록 해두었습니다. 여기까지는 1부 내용을 참고하시면 됩니다.

 

아래는 스크립트 중지 모델인데요. 추가적인 옵션들을 더 제공해야 할지 고민중입니다. 현재는 선택한 스크립트를 중지합니다. 만약, 중지할 스크립트가 서브 스크립트를 가지고 있으면 모든 서브 스크립트도 같이 중지합니다. 이렇게하려면 재귀적으로 서브 스크립트를 모두 가져와야 하는데요. 이 부분은 코드로 알아볼께요.

using Ai.Interface;

namespace Ai.Model.Action.Script
{
    [Serializable]
    public class StopModel : BaseModel
    {
        public override string? Excute(Ai.Interface.IPlayer player)
        {
            string? id = base.Excute(player);

            if (!string.IsNullOrEmpty(SelectScriptFile))
            {
                List<IPlayer> children = new List<IPlayer>();
                Ai.Common.Helper.GetRecursiveChildPlayers(children, player, SelectScriptFile);

                foreach (var child in children)
                    child.Stop();
            }

            return id;
        }
    }
}

 

Ai.Common.Helper.GetRecursiveChildPlayers 메소드는 플레이어가 가진 서브 스크립트들을 재귀적으로 모두 찾아줍니다.

public static void GetRecursiveChildPlayers(List<IPlayer> players, IPlayer player, string playerId)
{
    if (player.Children != null && player.Children.Count > 0)
    {
        foreach (var child in player.Children)
        {
            if (child.Children != null && player.Children.Count > 0)
                GetRecursiveChildPlayers(players, child, playerId);

            if (child.Id == playerId)
                players.Add(child);
        }
    }
}

 

기존에 Thread 방식으로 만든 엔지엠 매크로는 동일한 스레드가 수행될 수 없었습니다. 하지만, Task를 사용하면 동일한 작업을 동시에 수행할 수 있기 때문에 같은 스크립트가 여러개 실행될 수 있습니다. 이 때 모두 스크립트명이 동일하기 때문에 중지할 스크립트 하나를 특정할 수 없게됩니다. 따라서, 찾은 모든 서브 스크립트를 중지하도록 만들었는데요. 아마도, 몇가지 추가적인 옵션을 부여해서 좀 더 디테일한 작업이 가능하도록 만들어야 하겠습니다. 지금은 일단 넘어가죠^^

 

이제 사용자가 선택한 스크립트를 중지할 수 있도록 해야 하는데요. IPlayer 인터페이스에 Stop 메소드를 하나 추가했습니다.

using System.Collections.Concurrent;

namespace Ai.Interface
{
    public interface IPlayer
    {
        string Id { get; }

        void Play();

        void Stop();

        void Pause();

        IPlayer AddSubPlayer(string selectScriptFile);
    }
}

 

Player 클래스에서 Stop 메소드를 구현해야 합니다.

        public void Stop()
        {
            if (this.Children != null && this.Children.Count > 0)
            {
                foreach (IPlayer child in this.Children)
                    child.Stop();
            }

            CTS.Cancel();
        }

 

Stop 코드는 이전과 동일합니다. 1부에서 클라이언트의 중지 버튼을 누르면 플레이어의 Stop 메소드가 호출되기 때문입니다. 스크립트 중지 액션도 사용자가 선택한 스크립트를 찾아서 중지하도록 하니까요. 클라이언트는 시각적으로 실행중인 스크립트를 선택할 수 있습니다. 아래처럼요. 2개의 스크립트가 열려 있고 "마우스 순차 클릭.ngs" 스크립트가 선택되어 있습니다. 이처럼 클라이언트는 현재 선택된 스크립트를 알 수 있습니다.

 

 

이전 시간에 만들었던 스크립트를 열고, 중지 액션을 추가한 후 지연 시간을 2초로 설정합니다.

 

 

매크로를 실행하면, 윈도우 바탕화면을 순차적으로 클릭하다가 2초 후 해당 스크립트를 중지시킵니다. 매인 스크립트는 중지되지 않았기 때문에 마지막 클릭 액션이 동작하고 모든 스크립트가 완료됩니다. 만약, 스크립트 중지 버튼을 클릭하면 동시에 같이 중지되게 됩니다.

https://youtu.be/F9w5k_DoiyA

 

 

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

 

반응형

댓글