NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • NGM 6
  • 매뉴얼

    NGM 6

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

    디자이너 엔지엠 프레임워크로 내 프로그램 판매하기. (Selling my program with the NGM framework.)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 개인 또는 회사의 서비스(제품, 프로그램)에 엔지엠 프레임워크로 자동화 RPA를 탑재해서 배포하고 싶은 경우 이 예제를 따라하시면 됩니다. 엔지엠 프레임워크를 사용하면 자사의 제품과 서비스를 쉽고 빠르게 자동화할 수 있는 방법을 제공합니다. DevOps와 같은 환경 구축 및 컨설팅 단계에서 자동 테스트는 엔지엠 프레임워크를 이용해서 서비스할 수 있습니다. 회계 소프트웨어의 경우도 자동 입력 및 처리까지도 RPA로 가능합니다. 이외에도 여러분야의 산업군에서 다양하게 시도되고 있는 RPA 솔루션에 아이디어가 있다면, 엔지엠 프레임워크로 빠르게 상용화하고 서비스할 수 있습니다. 새로운 시도를 준비중인 업체 또는 기존 자사 서비스의 업그레이드를 준비중이라면 엔지엠소프트웨어의 파트너 라이센스를 사용해보세요. 자세한 내용은 [ 관리자에게 문의 ]하시기 바랍니다.

    1bt32ET.png

     

     

    주로 반도체와 장비쪽에서 개발을 해오다보니 타 산업군에서 필요한 비즈니스를 발굴하는데 어려움이 많습니다. 항상~ 오픈마인드로 여러가지 가능성들을 열어놓고 있습니다. 충분히 사업성과 BM이 검증된다면 함께할 수 있는 플랜들도 준비되어 있습니다. 같이 법인을 설립하거나 지분 참여와 투자자등등... 이외에도 협력할 수 있는 방안들은 협의할 수 있습니다. 파트너쉽은 동등한 기술을 가진 업체 또는 규모를 갖춘 법인등등... 엔지엠소프트웨어의 기술력과 노하우를 담을 수 있는 그릇을 갖춘 업체면 좋겠네요~ 시작하기도전에 관련 없는 썰을 좀 풀었는데요. 이제 시작해야겠군요. 우선, 엔지엠 프레임워크를 사용하려면 엔지엠 엔터프라이즈 라이센스가 있어야 합니다. 그리고, 별도로 디자이너를 요청해야 합니다. 디자이너 셋업 파일을 받으면 로컬 컴퓨터에서 더블 클릭하여 설치하세요. 설치는 아래 링크를 참고하세요.

    [ 엔지엠 디자이너 설치하기 ]

     

    이 내용은 기존에 서비스하고 있는 제품을 가진 고객을 대상으로 작성하는 내용입니다. 따라서, 기본적으로 Visual Studio를 이용한 C# 개발자 기준으로 진행합니다. 비개발자 또는 타 언어(C, C++, Java, Python등등) 개발자는 매뉴얼의 디자이너 카테고리 내용을 참고하세요. 그리고, 매뉴얼의 팁 앤 테크도 보시면 많은 도움이 됩니다. 서비스중인 프로그램이 있으면 해당 프로젝트를 Visual Studio에서 열어줍니다. 그리고, 엔지엠 프레임워크를 사용하기 위해 Designer 모듈을 참조에 추가해주세요.

    WMWiphT.png

     

     

    이미 서비스중인 제품에 엔지엠 RPA(Robotic Process Automation)를 적용시키기 위해서 몇가지 방식을 이해해야 합니다. [ 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

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.