본문 바로가기
이미지 매크로

C# .NET Core 매크로 프로그램 만들기. (마우스 더블 클릭과 휠)

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

 

안녕하세요. 엔지엠소프트웨어입니다. 마우스 관련 액션은 이 글이 마지막이 될듯 하네요. 마우스 관련 기능은 마우스 더블 클릭과 휠 조작만 남았는데요. 크게 어려운 부분이 없어서 2개를 묶어서 같이 설명하면 좋을듯 합니다. 우선, 마우스 더블 클릭에 대해서 알아볼께요. 마우스 더블 클릭은 마우스 클릭을 2번 하는것과 같습니다. 그렇기 때문에 아래와 같이 마우스 클릭 액션을 상속 받아서 2회 실행해주면 됩니다.

namespace Ai.Model.Action.Mouse
{
    [Serializable]
    public class DoubleClickModel : ClickModel
    {
        public override string? Excute(Ai.Interface.IPlayer player)
        {
            base.Execute(player);
            base.Execute(player);
            return null;
        }
    }
}

 

코드가 상당히 간단하죠? 마우스 클릭에서 설정해야 할 모든 옵션이 더블 클릭과 동일합니다. 따라서, 불필요하게 중복코드를 만들 필요가 없습니다. 이미 다 만들어져 있으니까요. 간단하게 테스트 해보면 아래와 같이 동작하는걸 확인할 수 있습니다.

https://youtu.be/Yr3hGpDhYwM

 

 

 

비활성으로 동작해도 동일합니다. 어차피 클릭을 두번하니까요.

https://youtu.be/wJX888yPxR8

 

 

 

이번에는 약간 복잡한데요. 마우스 휠에 대해서 알아볼께요. 휠은 마우스 버튼 옵션이 없기 때문에 별도로 만들어야 합니다.

using System.ComponentModel;

namespace Ai.Model.Action.Mouse
{
    [Serializable]
    public class WheelModel : BaseModel
    {
        [LocalizedCategory("Action")]
        [LocalizedDisplayName("Direction")]
        [LocalizedDescription("Direction")]
        [Browsable(true)]
        [DefaultValue(typeof(Ai.Definition.Direction), "Down")]
        public Ai.Definition.Direction Direction { get; set; } = Definition.Direction.Down;

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

        [LocalizedCategory("Action")]
        [LocalizedDisplayName("WheelSpeed")]
        [LocalizedDescription("WheelSpeed")]
        [Browsable(true)]
        [DefaultValue(0)]
        public int WheelSpeed { get; set; }
        public override string? Excute(Ai.Interface.IPlayer player)

 

마우스 휠을 동작시키려면 총 3가지의 옵션이 필요합니다. 어느 방향으로 휠을 굴릴지에 대한 속성은 Direction입니다. 상하좌우로 휠을 굴릴 수 있습니다. 일반적으로 휠은 상하만 존재하는데요. 좌우 휠도 있기 때문에 방향은 총 4가지를 제공합니다. 좌우 휠 옵션을 줄 수 있는 방법은 Input API밖에 없습니다. 기본 동작은 Event이기 때문에 아래와 같이 user32 API를 연결하세요.

        [DllImport("user32.dll")]
        private static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);

 

Input은 아래와 같이 구조체를 하나 만들어서 API로 넘겨야 합니다.

internal enum MouseFlag : uint
{
    VERTICAL_WHEEL = 0x0800,
    HORIZONTAL_WHEEL = 0x1000
}

internal struct MOUSEINPUT
{
    internal Int32 X;
    internal Int32 Y;
    internal UInt32 MouseData;
    internal UInt32 Flags;
    internal UInt32 Time;
    internal IntPtr ExtraInfo;
}

public void MouseWheel()
{
    new MOUSEINPUT()
    {
        Flags = 0,
        MouseData = 1,
        X = 100,
        Y = 100
    }
}

 

마우스 휠 방향에 따라 아래와 같이 메소드를 콜해주는데요. 좌우로 휠을 굴리는건 비활성 API가 없습니다.

                        switch (direction)
                        {
                            case Definition.Direction.Up:
                                Ai.Api.MouseKeyboardManager.MouseSimulator.MouseWheel(wheelDelta * 120);
                                break;
                            case Definition.Direction.Down:
                                Ai.Api.MouseKeyboardManager.MouseSimulator.MouseWheel(wheelDelta * -120);
                                break;
                            case Definition.Direction.Left:
                                break;
                            case Definition.Direction.Right:
                                break;
                        }

 

참고로, 델타에 120을 곱해주는건 휠 한번 굴리는 기본 값이 120이기 때문입니다. 그리고, 위로 굴릴 때는 양수 값이고 아래로 굴릴 때는 음수 값을 넘겨야 합니다. 비활성도 상하 방향으로 휠을 굴리려면 PostMessage와 SendMessage에 적절하게 값을 넘겨줘야 합니다.

switch (direction)
{
    case Definition.Direction.Up:
    Ai.Common.Windows.PostMessage(controlHandle.Value, Ai.Api.Options.WindowMessage.WM_MOUSEWHEEL, (wheelDelta * 120) << 16, Windows.MakeLParam(position));
    break;
    case Definition.Direction.Down:
    Ai.Common.Windows.PostMessage(controlHandle.Value, Ai.Api.Options.WindowMessage.WM_MOUSEWHEEL, (wheelDelta * 120 * -1) << 16, Windows.MakeLParam(position));
    break;
    case Definition.Direction.Left:
    break;
    case Definition.Direction.Right:
    break;
}

 

마우스 휠 모델의 Execute에서 InputType에 따라 적절하게 메소드를 호출해주면 되는데요. 정상적으로 동작하는지 테스트 해볼까요? 테스트에 사용할 메모장을 하나 실행하고, 아래 그림과 같이 엔터키를 100번 눌렀습니다. 그리고, 스크롤바가 중간쯤 위치하도록 위치 시켜보세요. 위 아래로 스크롤되는걸 봐야 하니까요.

 

 

비활성으로 동작하는 테스트입니다. 스크롤을 위 아래로 10번 동작하게 했습니다.

https://youtu.be/Je7MZaN_WFo

 

 

 

이번에는 휠 스크롤 속도를 조절해볼까요? 비활성 상태라서 마우스가 이동하지는 않습니다.

https://youtu.be/nxjxjDpY_Yc

 

 

 

Input으로 입력 방법을 변경하고 좌우로 동작하는지도 확인해볼께요. 좌우 스크롤은 Input밖에 안되서 다른건 테스트 해볼 수 없습니다.

https://youtu.be/i8gSc99Du48

 

 

 

휠 조작에서 상하는 문제가 없지만, 좌우는 약간 제약이 있습니다. 좌우를 사용할일이 많지는 않지만, 필요하다면 Input 방식으로 처리해야 합니다. 관련 코드는 참고만 하시고, 디테일한 내용들은 구글에서 검색해보시면 많은 내용들이 나올겁니다. 개발하면서 테스트를 같이 하다보면 문제점을 쉽게 발견할 수 있습니다. 참고로, nuget이나 github에서 비활성 매크로로 검색하면 잘 만들어진 라이브러리들이 있어요. 보통은 이런걸 이용해서 매크로 프로그램을 만듭니다. 다음에는 키보드 관련 내용들을 모두 완성 해보도록 할께요^^

 

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

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

 

원본 글 보기

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

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글