NGMsoftware

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

    학습


    C# C# .NET Core 매크로 프로그램 만들기. (복사 붙여넣기)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 앞서 키보드 쓰기 액션을 만들어서 사용해봤는데요. 오늘은 키보드의 나머지 기능들을 모두 만들어보고, 테스트까지 해보겠습니다. 키보드 쓰기 액션으로는 복사(Control+C), 붙여넣기(Control+V)와 같은 동작을 수행할 수 없습니다. 따라서, 키보드 다운과 업 액션이 필요한데요. 사람이 이 동작을 수행한다고 하면 아래와 같이 스크립트를 만들어야 합니다.

    Vh1a1PG.jpeg

     

     

    사람이 하는 동작과 동일하죠? 메모장을 2개 켜놓고 복사, 붙여넣기를 해볼까요?

    y7VgRtK.jpeg

     

     

    첫번째 메모장에서 전체 선택 후 복사합니다. 그리고, 두번째 메모장을 클릭하고 붙여넣기하는 로직입니다.

     

     

    의도한대로 잘 동작하는군요.

    • 대로: 어떤 상태나 행동을 나타낼 때
    • 데로: 방향을 나타내는 부적격 조사 로가 데에 덧붙은 형태

     

    키보드의 특정 키를 다운할 때 사용하는 메소드입니다.

            public static void Down(KeyboardVirtualKeyCode key, Definition.DeviceInputType inputType, List<nint>? controlHandles)
            {
                switch (inputType)
                {
                    case Ai.Definition.DeviceInputType.Windows:
                    case Definition.DeviceInputType.Event:
                        Ai.Api.MouseKeyboardManager.KeyboardSimulator.KeyDown((Keys)key);
                        break;
                    case Definition.DeviceInputType.Input:
                        var input = Ai.Global.Instance<Api.NativeInputManager.InputSimulator>();
                        input?.Keyboard.KeyDown(key);
                        break;
                    case Definition.DeviceInputType.PostMessage:
                        if (controlHandles != null)
                        {
                            foreach (var handle in controlHandles)
                                Ai.Common.Windows.PostMessage(handle, Ai.Api.Options.WindowMessage.WM_KEYDOWN, (char)key, 0);
                        }
                        break;
                    case Definition.DeviceInputType.SendMessage:
                        if (controlHandles != null)
                        {
                            foreach (var handle in controlHandles)
                                Ai.Common.Windows.SendMessage(handle, Ai.Api.Options.WindowMessage.WM_KEYDOWN, (char)key, 0);
                        }
                        break;
                }
            }

     

    아래는 키보드를 땔 때 사용하는 업 메소드입니다.

            public static void Up(KeyboardVirtualKeyCode key, Definition.DeviceInputType inputType, List<nint>? controlHandles)
            {
                switch (inputType)
                {
                    case Ai.Definition.DeviceInputType.Windows:
                    case Definition.DeviceInputType.Event:
                        Ai.Api.MouseKeyboardManager.KeyboardSimulator.KeyUp((Keys)key);
                        break;
                    case Definition.DeviceInputType.Input:
                        var input = Ai.Global.Instance<Api.NativeInputManager.InputSimulator>();
                        input?.Keyboard.KeyUp(key);
                        break;
                    case Definition.DeviceInputType.PostMessage:
                        if (controlHandles != null)
                        {
                            foreach (var handle in controlHandles)
                                Ai.Common.Windows.PostMessage(handle, Ai.Api.Options.WindowMessage.WM_KEYUP, (char)key, 0);
                        }
                        break;
                    case Definition.DeviceInputType.SendMessage:
                        if (controlHandles != null)
                        {
                            foreach (var handle in controlHandles)
                                Ai.Common.Windows.SendMessage(handle, Ai.Api.Options.WindowMessage.WM_KEYUP, (char)key, 0);
                        }
                        break;
                }
            }

     

    키보드 다운과 업 코드는 거의 동일합니다. 실제 API를 담당하는 메소드를 호출할 때 다운인지 업인지 차이만 있습니다. 일부 프로그램 또는 사용하는 InputType에 따라 키보드 다운 또는 업을 선택적으로 사용해야 합니다. 이번 예제처럼 메모장은 다운업 옵션을 사용해야 합니다.

            [LocalizedCategory("Action")]
            [LocalizedDisplayName("KeyInputType")]
            [LocalizedDescription("KeyInputType")]
            [Browsable(true)]
            [DefaultValue(typeof(Definition.KeyInputType), "DownUp")]
            public Ai.Definition.KeyInputType KeyInputType { get; set; } = Definition.KeyInputType.DownUp;

     

    하지만, 비활성 모드에서는 Down과 Up에 대한 구분이 없습니다. 키보드 코드만 입력될 뿐입니다. 따라서, 비활성 모드에서 다운과 업을 모두 사용하면 키보드 입력이 두번 발생하게 됩니다. 비활성 모드에서는 이 옵션을 Up으로 변경하고 사용해야 정상적으로 동작합니다.

    svL5lPD.jpeg

     

     

    핸들은 2개를 추가해야 합니다. 첫번째 메모장에서 복사한 후 두번째 메모장에 붙여넣기 해야해서 각각 핸들이 필요합니다.

     

     

    활성 모드는 마우스와 키보드를 사용할 수 없지만, 비활성 모드는 마우스와 키보드가 자유롭고 동시에 처리가 가능합니다. 아래는 비활성으로 동작시킨 동영상입니다.

     

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.