NGMsoftware

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

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

    팁 앤 테크

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

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

    디자이너 [개발자용] 디자이너 프레임워크에서 클래스디디로 하드웨어 동작 시키기. (Running hardware with ClassDD…

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 엔지엠 디자이너에서 제공하는 프레임워크를 이용해서 클래스디디를 연동하는 방법에 대해 알아보도록 하겠습니다. 이 내용을 학습하려면 엔지엠 에디터와 플레이어 엔터프라이즈 라이센스가 필요합니다. 또한, 라이센스를 구매한 후 [ 관리자에게 디자이너를 요청 ]해야 합니다. Visual Studio 2019를 실행하고 콘솔 프로그램을 하나 추가해주세요. 콘솔 프로젝트를 만들고 디자이너 및 프레임워크를 설정하는 방법은 [ 여기 ]를 참고하세요. 그리고~ 관리자에게 받은 "DD94687.32.dll", "DD94687.64.dll" 모듈 2개를 프로젝트에 추가해줍니다.

    p0peKQ9.png

     

     

    모듈 2개를 선택한 후 우클릭하세요. 가장 밑에 속성을 선택합니다. 그리고, 빌드 작업은 "내용"으로 하고 출력 디렉터리에 복사는 "새 버전이면 복사"로 선택해주세요.

    ifIYlih.png

     

     

    프로젝트의 속성을 확인하세요. 플렛폼 대상이 Any CPU이고 32비트 기본 사용에 체크되어 있어야 합니다.

    W6tyVCY.png

     

     

    이제 클래스 디디로 하드웨어 마우스와 키보드를 사용할 준비가 완료되었습니다. 아래 코드를 Program.cs에 붙여넣기 하고 실행 해보세요.

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    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");
    
            TreeNode tn1 = sv.TreeView.Nodes.Add("DD", "ClassDD");
            tn1.Tag = new NGM.Models.ExternalModule.ClassDDModel()
            {
                FunctionKey = NGM.Definition.FunctionKey.EXTERNAL_MODULE_CLASS_DD,
                SelectModule = Path.Combine(Application.StartupPath, "DD94687.32.dll"),
                MovingDelay = 10,
                MovingStep = 10
            };
    
            TreeNode tn2 = sv.TreeView.Nodes.Add("MC", "MouseClick");
            tn2.Tag = new NGM.Models.Mouse.ClickModel()
            {
                FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK,
                MousePoint = new System.Drawing.Point(100, 100)
            };
    
            // 스크립트를 실행합니다.
            sv.Play();
    
            // 프로세스가 종료되서 프로그램이 중지되는걸 방지합니다.
            Console.ReadLine();
        }
    }

     

    아래 그림과 같이 컴파일된 exe 파일을 실행 해보세요. 마우스가 목표 지점으로 이동한 후 클릭하는걸 알 수 있습니다.

    LwJFfp0.gif

     

     

    만약, 32비트와 64비트를 동적으로 처리하려면 어떻게 해야 할까요? exe가 어떤 플렛폼인지 알면 별도로 처리가 가능합니다. 아래 코드에서 "Environment.Is64BitProcess"로 체크가 가능합니다. 그렇기에 if 조건으로 32비트와 64비트를 구분해서 처리할 수 있습니다. Environment(엔바이런먼트, 환경)는 시스템 환경에 대한 전반적인 정보를 제공해줍니다. 유용한 것들이 많으니 한번쯤은 봐두는게 좋습니다. 윈도우용 프로그램이나 솔루션을 개발한다면 상당히 자주 사용하는 클래스입니다. 중요하니 외워두세요!

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    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");
    
            string selectModule = Path.Combine(Application.StartupPath, "DD94687.32.dll");
    
            if (Environment.Is64BitProcess)
                selectModule = Path.Combine(Application.StartupPath, "DD94687.64.dll");
    
            TreeNode tn1 = sv.TreeView.Nodes.Add("DD", "ClassDD");
            tn1.Tag = new NGM.Models.ExternalModule.ClassDDModel()
            {
                FunctionKey = NGM.Definition.FunctionKey.EXTERNAL_MODULE_CLASS_DD,
                SelectModule = selectModule,
                MovingDelay = 10,
                MovingStep = 10
            };
    
            TreeNode tn2 = sv.TreeView.Nodes.Add("MC", "MouseClick");
            tn2.Tag = new NGM.Models.Mouse.ClickModel()
            {
                FunctionKey = NGM.Definition.FunctionKey.MOUSE_CLICK,
                MousePoint = new System.Drawing.Point(100, 100)
            };
    
            // 스크립트를 실행합니다.
            sv.Play();
    
            // 프로세스가 종료되서 프로그램이 중지되는걸 방지합니다.
            Console.ReadLine();
        }
    }

     

    코드가 일부 변경되었지만, 실행해도 정상 동작합니다. 이제 64비트에서도 동작하는지 확인해봅시다. 아래와 같이 프로젝트의 속성을 열어주세요. 그리고 우측의 빌드 탭을 선택하고 플랫폼 대상x64로 변경해줍니다. 그러면 자동으로 32비트 기본 사용 체크가 해제되고 비활성화 됩니다.

    h0XPUdh.png

     

     

    실행해보세요. 이번에도 정상 동작하죠? 동적으로 32비트와 64비트 모듈을 로딩해서 처리가 간단합니다. 이외에도 전처리기를 사용해서 처리해도 됩니다만, 이렇게 하려면 프로젝트 정보에 트레이스 상수로 플랫좀 정보를 추가해줘야 합니다. 프로젝트 파일은 Visual Studio에서 관리해주는 파일입니다. 그래서 가능하면~ 직접 수정하는건 권장하지 않습니다. 엔지엠의 경우에는 32비트와 64비트용 모듈을 별도로 컴파일하고 있습니다. 뭐~ 서비스 환경에 따라 선택해야 하는 하나의 설정일뿐이지만, 유지보수나 나중에 예측하지 못하는 문제에 대해 사고를 방지하려면 따로 컴파일하는게 좋지 않을까 생각됩니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.