NGMsoftware

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

    학습


    C# C# 매크로 마우스 동작 만들기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로도 C#이 90프로고, 나머지 10프로는 C++, 파이썬, 오토핫키등과 같은 언어와 스크립트로 이루어져 있습니다. 오늘은 C# 매크로에서 가장 핵심이 되는 마우스 동작을 어떻게 만드는지 알아볼건데요. 마우스 매크로에 필요한 기능은 2가지로 요약할 수 있습니다. 첫번째는 마우스 커서를 클릭할 위치로 이동하는것이고, 두번째는 마우스 다운과 업을 통해 클릭하도록 하는겁니다.

    1. 마우스 커서 위치 이동
    2. 마우스 자동 클릭 이벤트 발생

     

    C#의 윈도우 폼에 마우스 관련된 메소드가 기본적으로 제공됩니다. 그런데, 윈폼의 마우스 기능은 제약이 있어서 윈도우 API 함수를 가져와서 사용해야 합니다. 아래와 같이 user32.dll의 함수를 C#으로 가져와서 사용할 수 있습니다. 이렇게하면 윈도우 API를 사용할 수 있게됩니다.

    // MouseEvent 함수: 마우스 자동 클릭 이벤트 발생
    [DllImport("user32.dll"), CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    public static extern void MouseEvent(int dwFlags, int dx, int dy, int cButton, int dwExtraInfo);
    
    // SetCursorPos 함수: 마우스 커서 위치 이동
    [DllImport("user32.dll")]
    public static extern int SetCursorPos(int x, int y);

     

    그리고, 두 함수를 이용할 수 있도록 마우스 매크로용 함수를 하나 더 선언합니다. 엔지엠 매크로의 Windows 라이브러리가 Windows API를 래핑한 클래스입니다. 아래 코드와 같이 윈도우에서 제공하는 수많은 함수들을 래핑해서 따로 만들어두면 나중에 사용하기가 좋습니다.

            /// <summary>
            /// 창 또는 컨트롤을 찾아서 반환합니다.
            /// </summary>
            /// <param name="handle">옵션에서 지정한 창을 찾기 위한 기준이 되는 창의 핸들입니다.</param>
            /// <param name="command">창을 찾기 위한 옵션을 선택합니다.</param>
            /// <returns>찾은 창의 핸들을 반환합니다.</returns>
            public static IntPtr GetWindow(IntPtr handle, Options.FindWindow command)
            {
                return User32.GetWindow(handle, command);
            }
    
            public static void MouseEvent(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo)
            {
                User32.mouse_event(dwFlags, dx, dy, dwData, dwExtraInfo);
            }

     

    아래는 마우스 이동에 필요한 파라메터 값을 가지고 있는 변수들입니다. 윈도우 API를 호출할 때 넘겨줘야 하는 값들인데요. 변수명은 사용자가 이해할 수 있는 이름으로 정의하면 됩니다. 비트 값은 외워서 사용할 수 없기 때문에 변수명을 잘 지어야 합니다. 0x가 앞에 붙으면 16진수라는 의미이고, 핵사코드가 됩니다.

    private const int MouseEventMove = 0x0001;
    private const int MouseEventLeftDown = 0x0002;
    private const int MouseEventLeftUp = 0x0004;
    private const int MouseEventRightDown = 0x0008;
    private const int MouseEventRightUp = 0x0016;

     

    마우스 클릭에 대한 커스텀 함수를 하나 만들어줍니다. 실제 사용은 이 함수를 호출해서 사용하게 됩니다.

            public static void MouseDown(MouseButton button)
            {
                switch (button)
                {
                    case MouseButton.Left:
                        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                        break;
                    case MouseButton.Right:
                        mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                        break;
                    case MouseButton.Middle:
                        mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
                        break;
                    case MouseButton.X1:
                        mouse_event(MOUSEEVENTF_X1_DOWN, 128, 0, 0, 1);
                        break;
                    case MouseButton.X2:
                        mouse_event(MOUSEEVENTF_X2_DOWN, 128, 0, 0, 2);
                        break;
                }
            }

     

    참고로, 실제 마우스 동작을 구현할 때는 좀 더 복잡하게 사용됩니다. 마우스 입력이 너무 빠르면 윈도우에서 신호를 받아들이지 못할수도 있습니다. 윈도우는 원할하게 운영체제를 운영 및 관리하기 위해 연속되는 입력에 대해 부하가 걸리면 명령을 취소하거나 건너뛰게 됩니다. 물론, 입력 신호를 건너뛰지 않게 윈도우 이벤트 큐에 추가할 수 있지만, 이런 내용들은 너무 복잡하기 때문에 자세하게 설명하지는 않겠습니다.

     

    MzUyHLG.gif

     

     

    C#은 파이썬보다 어려울 수 있습니다. GUI까지 갖추려면 더 많은 시간과 노력이 필요합니다. 그렇더라도 비주얼 스튜디오라는 막강한 무료 도구가 있어서 몇번 만져보다보면 누구나 쉽게 GUI를 구성해서 사용할 수 있습니다. 자바 개발자가 C#으로 넘어오더라도 크게 문제되지 않는 수준이거든요. 반대로 C# 개발자는 자바로 넘어가기가 쉽습니다. GUI를 신경쓰지 않고 비즈니스 로직만 구현하면 되니까요. UI 스레드와 작업자 스레드로부터도 자유로워요. 아무튼, C#으로 매크로를 개발하기 위한 준비단계라서 개발 환경을 갖추는것부터 하나씩 알아보도록 하겠습니다. 우선 Visual Studio Community를 [ 여기 ]에서 다운로드 받은 후 설치하세요. 설치 방법은 아래 글을 참고하세요.

    비주얼 스튜디오 설치하기 ]

     

    비주얼 스튜디오를 실행하기 전 중요한 설정이 있습니다. 이 내용을 설정하지 않으면 앞으로 개발하는데 문제가 발생하더라도 원인을 찾기가 상당히 어려워집니다. 아래 그림과 같이 설치한 비주얼 스튜디오에서 우클릭 후 자세히 > 파일 위치 열기를 클릭 하세요.

    WGPM2H3.png

     

     

    비주얼 스튜디오에서 우클릭 후 속성을 클릭하세요.

    Dlfn35u.png

     

     

    고급 버튼을 클릭하세요.

    DA8f2Au.png

     

     

    관리자 권한으로 실행에 체크하고, 확인을 클릭하세요.

    2sBGs58.png

     

     

    개발할 때 관리자 권한으로 실행해야 합니다. 당연한 말이겠지만, 매크로 프로그램이 다른 프로그램을 제어해야 하기 때문에 높은 권한이 필요합니다. 그래서, 비주얼 스튜디오를 관리자 권한으로 매번 실행할 수 있도록 설정한겁니다. 추후에는 직접 만든 프로그램도 관리자 권한으로 실행될 수 있도록 처리해야 하는데요. 이건 차차 알아보기로 하고, C#을 개발하기 위한 비주얼 스튜디오를 실행 해봅시다. 여러분들은 아래 그림처럼 코딩되어 있지는 않을겁니다.

    C64IEW0.png

     

     

    비주얼 스튜디오를 실행한 후 "새 프로젝트 만들기"를 클릭하세요.

    Rk07h8R.png

     

     

    Windows Forms 앱(.NET Framework) 프로젝트를 만들기 아래 그림을 참고해서 따라해보세요.

    1. 언어는 C# 선택
    2. 플렛폼은 Windows 선택
    3. 프로젝트 형식은 데스크톱 선택
    4. Windows Forms 앱(.NET Framework) 선택
    5. 다음 클릭

    K6nK4en.png

     

     

    프로젝트 이름에 MyPlayer를 입력한 후 위치를 설정하세요. 이 예제에서는 기본 위치를 사용합니다. 마지막으로 프레임워크를 4.6.1로 선택하고 만들기를 클릭하세요.

    jRpmcKY.png

     

     

    여기까지 하면 아래와 같은 윈폼 프로젝트가 생성됩니다. 현업에서는 Windows Forms를 줄여서 윈폼이라고 부릅니다. 보시면 아시겠지만~ 엔지엠 에디터와 비슷한 화면 구성을 가지고 있습니다. 대부분의 IDE가 이런 구성을 가지는데요. 가장 효율적으로 많은 정보를 표시할 수 있는 UI/UX라고 보면 될거 같습니다. 저는 뭔가 할때마다 새창이 뜨는걸 별로 안좋아 합니다. 작업의 흐름을 방해하기 때문이죠^^;

    9aRGw50.png

     

     

    여기까지해서 C# 매크로를 만들기 위한 준비를 마쳤습니다. 이제 매크로를 실행하고, 중지할 수 있는 버튼을 만드는것부터 시작해야 합니다. 아래 동영상을 참고해서 버튼 2개를 추가하고, 각각 표시할 텍스트를 "실행"과 "중지"로 수정 해주세요.

    A15tBpl.gif

     

     

    각각의 버튼을 더블 클릭하면 버튼을 눌렀을 때 동작해야 하는 이벤트 처리기를 자동으로 추가 해줍니다.

    nnwXrWt.gif

     

     

     

    위 코드에서 불필요한 using은 제거한 상태입니다. 일단, DllImport는 비관리 라이브러리에서 정적 메소드를 사용할 수 있도록 해주는 C# 특성(Attribute)입니다. 점점 어려운 용어들이 나오고 있어서... 설명해야 하나 말아야 하나 고민이 깊어집니다. 개발자라면 그냥 아는 이야기들인데요. 이걸 설명하려면 또 많은 시간을 잡아먹을듯 하군요. 여러분들은 단순히 비관리(C나 C++로 만들어진 동적 라이브러리) 기능을 가져다가 쓸 때 이 특성을 이용하면 된다고 이해하시면 됩니다. 바탕화면의 아이콘들의 좌표를 알아내기 위해 엔지엠 에디터를 실행하고, 마우스 액션을 하나 추가 해줍니다.

    7iW9THm.gif

     

     

    우측 속성창에서 마우스 좌표 속성을 선택하세요. 그러면, 우측에 "..." 버튼이 표시됩니다.

    xUHplgG.png

     

     

    "..." 버튼을 클릭한 후 바탕화면의 "내 PC" 로 이동하세요. 그리고, F1을 누르면 해당 좌표를 확인할 수 있습니다. 제 모니터 해상도(1920x1080) 기준 "내 PC"의 좌표는 "40, 31"입니다. 이 값을 아래와 같이 마우스 클릭 좌표로 사용하면 됩니다. 위에서 만든 코드를 폼에 붙여넣기 하세요. 이제 정상적으로 동작하는지 테스트를 해볼까요? 비주얼 스튜디오에서 F5(실행)를 누르거나 아래 동영상처럼 ▶ 버튼을 클릭해도 됩니다. 우리가 만든 프로그램이 컴파일된 후 아래와 같은 프로그램이 실행됩니다. 여기서 실행 버튼을 클릭하면 정확하게 내 PC를 클릭합니다.

    0LO58M4.gif

     

     

    이렇게해서 간단하게 C# 마우스 클릭 자동화 매크로를 어떻게 만드는지 알아봤습니다. 이와 관련된 지식이 있다면 1시간 정도면 충분히 마우스로만 동작하는 매크로를 누구나 쉽게 만들 수 있을겁니다. 그런데, 업무 자동화 RPA 매크로가 단순히 마우스 클릭만으로는 한계가 있습니다. 이미지 서치, 이미지 매치와 같은 고급 기술들이 필요한데요. 윈도우 화면에서 원하는 버튼 또는 이미지를 찾아서 클릭하거나 윈도우의 색상을 인식해서 어떤 조건에 따라 동작하게 로직을 분기할수도 있습니다. 이 부분은 다음 글에서 좀 더 자세하게 알아보기로 하고 오늘은 여기에서 글을 마치도록 하겠습니다.

     

    참고로, 엔지엠소프트웨어 홈페이지에는 파이썬 매크로 강좌와 오토핫키 매크로 강좌도 있습니다. C나 C++ 및 Java로 매크로를 만드는 방법도 자세하게 소개되어 있는데요. 각자가 편한 언어로 매크로 프로그램을 제작할 수 있게 설명되어 있으니 한번 읽어보세요. 하지만, 디테일하게 매크로를 개발할 여유가 없거나 개발자가 아니라면 엔지엠 매크로 에디터를 구매하셔서 업무 자동화에 적용시키는게 효율적일겁니다. 아무래도 사용하기 쉽고 편하게 미리 만들어진 액션들을 순서대로 조합해서 사용하는게 편리하니까요. 시간과 노력을 돈으로 환산해서 비교해본다면 엔지엠 매크로 에디터는 가성비가 정말 뛰어난 프로그램입니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.