본문 바로가기
게임

C# .NET 매크로 프로그램 만들기. (지연 또는 딜레이 액션)

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

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

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원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로에는 기본적으로 모든 액션들이 지연 및 랜덤 지연을 설정할 수 있는 속성들이 있습니다. 액션이 실행되기 전과 실행된 후에 설정이 가능한데요. 스크립트에 액션들은 순차적으로 실행되기 때문에 실행 후 지연과 다음 액션의 실행 전 지연은 동일해 보이지만, 프로세스적으로 생각해보면 다르다고 할 수 있습니다. 아래와 같은 스크립트가 있다고 생각 해볼께요.

 

 

바탕화면에 있는 아이콘을 위에서부터 하나씩 순차적으로 클릭하는데요. 전부 실행 전 지연이 설정되어 있습니다. 이 때 첫번째가 실행되고, 두번째가 실행될 때 중지를 누르면 첫번째 액션이 실행되고 중지를 눌렀지만, 두번째 액션도 실행되고 중지됩니다. 이렇게 동작하는 이유는 첫번째 액션이 실행된 후 이미 두번째 액션이 실행된 상태에서 지연되고 있는 상태입니다. 중지가 예약되어 있지만, 두번째 액션이 실행된 후 예약된 중지가 동작하게 됩니다.

 

이번에는 전부 실행 후 지연에 지연 시간을 설정하고, 첫번째 클릭 후 중지를 눌러보면 이번에는 두번째 클릭이 실행되지 않고 중지되는걸 확인할 수 있습니다. 엔지엠 6에서는 중지를 누르면 바로 중지가 동작하는데요. 이는 스레드를 강제로 중지시키도록 했기 때문입니다. 이렇게하면 여러가지 문제가 발생하게 됩니다. 마이크로소프트에서도 스레드를 강제로 중지시키기 보다는 안정적으로 중지할 수 있도록 가이드하고 있습니다.

 

하나의 액션은 실행 전 지연과 자신의 동작 후 실행 후 지연을 수행합니다. 동작과 지연이 합쳐져 있다보니 3개의 행위가 모두 완료되어야 다음에 종료할 수 있습니다. 그렇기 때문에 액션을 분리하기 위해서 지연 액션이 별도로 필요합니다. 이외에도 다양한 환경에 유연하게 대처하기 위해서 분리된 지연 액션이 필요합니다.

 

날짜와 시간 관련 액션들을 모아둘 폴더를 하나 만들고, DelayModel을 추가했습니다.

 

 

지연 액션은 아래와 같은 속성을 가지고 있습니다. 다른 액션들이 실행전 지연과 실행 후 지연으로 가지고 있는 속성입니다.

[LocalizedCategory("Action")]
[LocalizedDisplayName("UseRandomDelay")]
[LocalizedDescription("UseRandomDateTime")]
[Browsable(true)]
[DefaultValue(false)]
public new bool UseRandomDelay { get; set; }

/// <summary>
/// 액션을 식별할 수 있는 유니크한 아이디를 설정합니다.
/// </summary>
[LocalizedCategory("Action")]
[LocalizedDisplayName("RandomMinDelay")]
[LocalizedDescription("RandomMinDelay")]
[Browsable(true)]
[DefaultValue(0)]
public new int RandomMinDelay { get; set; }

[LocalizedCategory("Action")]
[LocalizedDisplayName("Delay")]
[LocalizedDescription("BeforeDelay")]
[Browsable(true)]
[DefaultValue(0)]
public new int BeforeDelay { get; set; }

[LocalizedCategory("Action")]
[LocalizedDisplayName("UseSpecialRandomDelay")]
[LocalizedDescription("UseSpecialRandom")]
[Browsable(true)]
[DefaultValue(false)]
public bool UseSpecialRandomDelay { get; set; }

 

실행 코드는 간단합니다. 몇줄 되지 않는데요. 중요한 부분은 CancellationToken 처리 부분입니다.

public override string? Execute(IPlayer player)
{
    var id = base.Execute(player);

    Task task = Task.Delay(Common.Helper.Delay(RandomMinDelay, BeforeDelay, UseRandomDelay, UseSpecialRandomDelay), player.CT);

    try
    {
        task.Wait();
    }
    catch
    {
        return id;
    }

    return id;
}

 

가능한 작업 취소를 처리하기 위해 TaskFactory 개체에 전달되는 취소 토큰을 생성하는 CancellationTokenSource 개체를 인스턴스화합니다 . 그러면 TaskFactory 객체는 취소 토큰을 특정 기기에 대한 판독값 수집을 담당하는 각 작업에 전달합니다. TaskFactory.ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) 메서드는 모든 판독값이 성공적으로 수집된 후에만 평균이 계산되도록 호출됩니다. 작업이 취소되어 완료되지 않은 경우 TaskFactory.ContinueWhenAll 메서드는 예외를 발생시킵니다.

 

CancellationToken을 사용하면 스레드, 스레드풀 작업 항목 또는 Task 개체 간의 협력 취소가 가능합니다. CancellationTokenSource.Token 속성에서 검색된 취소 토큰을 관리하는 CancellationTokenSource 개체를 인스턴스화하여 취소 토큰을 만듭니다 . 그런 다음 취소 알림을 받아야 하는 스레드, 작업 또는 작업 수에 취소 토큰을 전달합니다. 취소를 시작하는데 토큰을 사용할 수 없습니다. 소유 개체가 CancellationTokenSource.Cancel을 호출하면 취소 토큰의 모든 복사본에 대한 IsCancellationRequested 속성이 True로 설정 됩니다 . 알림을 받은 개체는 적절한 방식으로 응답할 수 있도록 메서드를 구성해야 합니다.

 

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

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

 

원본 글 보기

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

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글