NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    디자이너 [개발자용] 디자이너 프레임워크를 이용한 나만의 매크로 프로그램 만들기 - 마우스 클릭.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠소프트웨어에서 제공하는 제품들은 [ 상품쇼핑 ]에서 확인할 수 있는데요. 일반적으로 가장 쉬운(?) [ 에디터 ]와 [ 플레이어 ]로 매크로를 만들어서 사용하고 있습니다. 이 둘을 이용하면 코딩을 몰라도 업무를 자동화 할 수 있는 매크로 프로그램을 제작할 수 있습니다. 또한, 스크립트는 사용자간 공유가 가능하기 때문에 판매해서 수익을 낼수도 있습니다. 제작자가 직접 스크립트 암호화와 인증도 처리해줄 수 있거든요^^; 오늘 알아볼 내용은 디자이너에서 제공하는 Framework를 이용해서 코딩 방식으로 매크로를 제작하는 방법에 대해 알아보겠습니다. 가장 간단한 마우스 클릭부터 해볼께요.

    ※ 디자이너는 엔터프라이즈 에디터와 플레이어를 구매 후 [ 관리자에게 별도로 요청 ]해야 합니다.

    xkcsS4k.png

     

     

    디자이너 설치 파일을 받은 후 [ 여기 ]를 참고해서 컴퓨터에 설치 해주세요. 그리고, [ Visual Studio ]도 함께 설치해야 합니다. 비주얼 스튜디오를 관리자 권한으로 실행한 후 "새 프로젝트 만들기"를 클릭 하세요.

    Rk07h8R.png

     

     

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

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

    K6nK4en.png

     

     

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

    QPZB2j8.png

     

     

    우측의 솔루션(Cltr+Alt+L) 창으로 이동한 후 FrameworkTest 프로젝트의 참조에서 우클릭하세요. 아래 그림과 같이 참조 추가하세요.

    j5U21dP.png

     

     

    우측 하단에 "찾아보기"를 클릭하세요. 설치한 디자이너의 프레임워크를 내 프로그램에서 사용하기 위해 라이브러리를 추가해야 합니다.

    8JQzi8K.png

     

     

    "Designer.dll"을 선택 후 "추가"를 클릭하세요.

    DFjuuJD.png

     

     

    첨부되어 있는 "Dummy.ngs"를 바탕화면에 다운로드 하세요. 그리고, 아래 그림과 같이 프로젝트를 선택한 후 "Shift+Alt+A"(기존 항목 추가)를 누르세요. 바탕화면에 다운로드 받은 "Dummy.ngs"를 선택해줍니다.

    JHVDFXd.png

     

     

    추가한 "Dummy.ngs"를 선택하고, "Alt+Enter"(속성)를 누르세요. 아래 그림과 같이 파일 속성을 변경해줍니다.

    7ulEuWI.png

     

     

    아래와 같은 화면이 표시됩니다. 여기서 "F7"을 눌러서 코드 보기로 이동하세요.

    aKKQ5pI.png

     

     

    오픈소스나 API쪽 개발을 많이 해보신 분들이라면 아래 코드를 보면 쉽게 이해할 수 있을겁니다. 기본적인 내용은 주석으로 달아놓았습니다.

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace FrameworkTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                
                // 매크로 엔진에서 가상으로 실행할 스크립트 뷰를 생성합니다. 
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                var sv = new Designer.Component.ScriptView(new Designer.ComponentDefault.MainView(), "/Dummy.ngs");
                
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                TreeNode tn = sv.TreeView.Nodes.Add("M", "Mouse"); 
    
                // 트리뷰에 추가한 노드에 마우스 클릭 액션을 추가해줍니다.
                tn.Tag = new NGM.Models.Mouse.ClickModel() 
                { 
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK, 
                    // 마우스 클릭 위치를 설정합니다.
                    MousePoint = new Point(100, 100) 
                };
    
                // 스크립트를 실행합니다.
                sv.Play();
            }
        }
    }

     

     

    "F5"를 눌러서 컴파일하고 실행 해보세요. 여러분들도 아래와 같은 화면이 나타날수도 있고, 아닐수도 있습니다. 만약, 로그인 화면이 나타난다면 [ 여기 ] 첫번째 두번째 내용을 참고하셔서 컴퓨터를 등록해주시면 됩니다. 로그인창이 나타나지 않으면 이미 라이센스를 등록한 상태입니다.

    VnjyyBE.png

     

     

    인증이 완료되면 다시 실행 해보세요. 아래 동영상처럼 내가 만든 프로그램에서 마우스 클릭이 동작하는걸 확인할 수 있습니다.

    DT66XHX.gif

     

     

    잘 보이질 않는군요-_-; 마우스 좌표를 조금 수정해서 내문서가 클릭되도록 해봅시다. 기존에 마우스 좌표를 100, 100에서 25, 20으로 수정했습니다.

                // 트리뷰에 추가한 노드에 마우스 클릭 액션을 추가해줍니다.
                tn.Tag = new NGM.Models.Mouse.ClickModel() 
                { 
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK, 
                    // 마우스 클릭 위치를 설정합니다.
                    MousePoint = new Point(25, 20) 
                };

     

     

    다시 실행하면 내문서를 클릭합니다.

    jaJ6r2F.gif

     

     

    어떤가요? 어려운가요? 실제로 마우스 클릭을 직접 코딩하려면 몇십줄의 코딩만 있으면 가능합니다. 하지만, 반복되는 작업과 사용 편의성을 위해 모듈화 한다면~ 개발자도 쉽지 않은 일입니다. 언뜻 보기에는 별거 아닌거 같아도 말이죠^^; 범용적인 모듈 개발은 수백줄의 코드와 수십개의 클래스가 필요합니다. 만약, 이미 업무 자동화 소프트웨어를 가진 분이라면 엔지엠의 우수한(?) 몇가지 기능만 필요할수도 있습니다. 또는, 하드웨어 방식으로 클릭되기를 원할수도 있죠. 이런 경우 단순 인터페이스만을 위한 콘솔이 필요할수도 있습니다. 아래는 콘솔 프로젝트의 전체 코드입니다.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 매크로 엔진에서 가상으로 실행할 스크립트 뷰를 생성합니다. 
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                var sv = new Designer.Component.ScriptView(new Designer.ComponentDefault.MainView(), "/Dummy.ngs");
    
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                TreeNode tn = sv.TreeView.Nodes.Add("A", "Arduino");
    
                // 트리뷰에 추가한 노드에 하드웨어 방식으로 입력하는 시리얼 통신 액션을 추가합니다.
                tn.Tag = new NGM.Models.SerialCommunication.SerialConnectionModel() 
                { 
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.SERIAL_CONNECTION, 
                    // 시리얼 포트를 설정해줍니다. 이 값은 사용자마다 다를 수 있습니다.
                    SerialPortName = "COM3", 
                    // 마우스가 목표 지점으로 이동할 때 얼마의 간격으로 이동할지 설정합니다.
                    MovingStep = 30, 
                    // 마우스가 목표 지점으로 위에 설정한 스텝만큼 이동할 때 지연 시간입니다.
                    MovingDelay = 10 
                };
    
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                tn = sv.TreeView.Nodes.Add("M", "Mouse");
    
                // 트리뷰에 추가한 노드에 마우스 클릭 액션을 추가해줍니다.
                tn.Tag = new NGM.Models.Mouse.ClickModel()
                {
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK,
                    // 마우스 클릭 위치를 설정합니다.
                    MousePoint = new Point(25, 20)
                };
    
                // 스크립트를 실행합니다.
                sv.Play();
    
                // 프로세스가 종료되서 프로그램이 중지되는걸 방지합니다.
                Console.ReadLine();
            }
        }
    }

     

     

    콘솔에서 실행(F5)하고 동작을 확인 해봅시다. 제 경우에는 아두이노가 이미 컴파일되어 설치된 상태입니다.

    loVK04X.gif

     

     

    만약, 콘솔창을 표시하고 싶지 않으면 아래와 같이 코드를 변경하면 됩니다.

    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace ConsoleTest
    {
        class Program
        {
            #region Windows API
            [DllImport("kernel32.dll")]
            static extern IntPtr GetConsoleWindow();
    
            [DllImport("user32.dll")]
            static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    
            const int SW_HIDE = 0;
            const int SW_SHOW = 1;
            #endregion
    
            static void Main(string[] args)
            {
                // 콘솔창이 표시되지 않도록 합니다.
                ShowWindow(GetConsoleWindow(), SW_HIDE);
    
                // 매크로 엔진에서 가상으로 실행할 스크립트 뷰를 생성합니다. 
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                var sv = new Designer.Component.ScriptView(new Designer.ComponentDefault.MainView(), "/Dummy.ngs");
    
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                TreeNode tn = sv.TreeView.Nodes.Add("A", "Arduino");
    
                // 트리뷰에 추가한 노드에 하드웨어 방식으로 입력하는 시리얼 통신 액션을 추가합니다.
                tn.Tag = new NGM.Models.SerialCommunication.SerialConnectionModel() 
                { 
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.SERIAL_CONNECTION, 
                    // 시리얼 포트를 설정해줍니다. 이 값은 사용자마다 다를 수 있습니다.
                    SerialPortName = "COM3", 
                    // 마우스가 목표 지점으로 이동할 때 얼마의 간격으로 이동할지 설정합니다.
                    MovingStep = 30, 
                    // 마우스가 목표 지점으로 위에 설정한 스텝만큼 이동할 때 지연 시간입니다.
                    MovingDelay = 10 
                };
    
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                tn = sv.TreeView.Nodes.Add("M", "Mouse");
    
                // 트리뷰에 추가한 노드에 마우스 클릭 액션을 추가해줍니다.
                tn.Tag = new NGM.Models.Mouse.ClickModel()
                {
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK,
                    // 마우스 클릭 위치를 설정합니다.
                    MousePoint = new Point(25, 20)
                };
    
                // 스크립트를 실행합니다.
                sv.Play();
    
                // 프로세스가 종료되서 프로그램이 중지되는걸 방지합니다.
                Console.ReadLine();
            }
        }
    }

     

     

    콘솔창 없이 실행되는걸 알 수 있습니다.

    97Mhj6z.gif

     

     

    일부 기능만 엔지엠 프레임워크의 도움을 받고 싶다면, 스크립트를 작성하거나 이 예제와 같이 코딩한 후 콘솔 또는 윈폼에 args로 좌표나 정보를 넘겨주면 됩니다. 이외에도 수많은 액션들을 적절하게 값을 만들어서 넘겨주면 아주 쉽게(?) 나만의 업무용 매크로를 만들 수 있을겁니다. 아직까지 메뉴얼과 커뮤니티 활동이 부족해서 정보를 얻기가 쉽지 않지만요. 이 부분은 라이센스를 구매하시면 무료로 포인트 제공과 고객 서비스 대화방에 들어오셔서 질문할 수 있습니다. 마지막으로 좀 더 액션 개발에만 집중하려면 반복되지 않는 초기화 함수를 별도로 작성하는게 좋습니다. 아래처럼요.

    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace ConsoleTest
    {
        class Program
        {
            #region Windows API
            [DllImport("kernel32.dll")]
            static extern IntPtr GetConsoleWindow();
    
            [DllImport("user32.dll")]
            static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    
            const int SW_HIDE = 0;
            const int SW_SHOW = 1;
            #endregion
    
            static void Main(string[] args)
            {
                Designer.Component.ScriptView sv = InInitializer();
                
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                TreeNode tn = sv.TreeView.Nodes.Add("A", "Arduino");
    
                // 트리뷰에 추가한 노드에 하드웨어 방식으로 입력하는 시리얼 통신 액션을 추가합니다.
                tn.Tag = new NGM.Models.SerialCommunication.SerialConnectionModel() 
                { 
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.SERIAL_CONNECTION, 
                    // 시리얼 포트를 설정해줍니다. 이 값은 사용자마다 다를 수 있습니다.
                    SerialPortName = "COM3", 
                    // 마우스가 목표 지점으로 이동할 때 얼마의 간격으로 이동할지 설정합니다.
                    MovingStep = 30, 
                    // 마우스가 목표 지점으로 위에 설정한 스텝만큼 이동할 때 지연 시간입니다.
                    MovingDelay = 10 
                };
    
                // 스크립트 뷰는 액션을 순차적으로 실행하기 위한 TreeView를 제공합니다.
                // 마우스 클릭 액션을 하나 추가합니다.
                tn = sv.TreeView.Nodes.Add("M", "Mouse");
    
                // 트리뷰에 추가한 노드에 마우스 클릭 액션을 추가해줍니다.
                tn.Tag = new NGM.Models.Mouse.ClickModel()
                {
                    // 매크로 엔진에서 액션을 구분하는 함수키를 설정합니다.
                    FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK,
                    // 마우스 클릭 위치를 설정합니다.
                    MousePoint = new Point(25, 20)
                };
    
                // 스크립트를 실행합니다.
                sv.Play();
    
                // 프로세스가 종료되서 프로그램이 중지되는걸 방지합니다.
                Console.ReadLine();
            }
    
            static Designer.Component.ScriptView InInitializer()
            {
                // 콘솔창이 표시되지 않도록 합니다.
                ShowWindow(GetConsoleWindow(), SW_HIDE);
    
                // 매크로 엔진에서 가상으로 실행할 스크립트 뷰를 생성합니다. 
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                return new Designer.Component.ScriptView(new Designer.ComponentDefault.MainView(), "/Dummy.ngs");
            }
        }
    }

     

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    첨부파일

    댓글목록

    등록된 댓글이 없습니다.