NGMsoftware

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

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

    팁 앤 테크

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

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

    커스텀 엔지엠 RPA 매크로 - 윈도우 10의 화면 배율 및 레이아웃 값을 가져오는 방법. (How to get screen scal…

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 RPA 매크로를 이용해서 업무 자동화를 진행하다보면 개발자 컴퓨터에서 정상 동작하던것이 고객 또는 소비자 컴퓨터에서 동작하지 않는 문제가 간혹 발생합니다. 그래픽 작업에 대한 이해가 있으면 쉽게 문제를 해결할 수 있을테지만, 대부분은 어떤 문제로 인해서 자동화 매크로가 동작하지 않는지 파악하는데 많은 시간을 소비하게 됩니다. 화면을 인식한다는 것은 모니터의 어떤 이미지를 저장(ngi, png, jpg등등...)해놓고, [ 이미지 서치 ]나 [ 이미지 매치 ] 액션이 실행될 때 화면을 캡쳐하고 여기서 저장된 이미지를 찾게됩니다. 이 때 저장된 이미지는 스크립트 제작자 컴퓨터 기준으로 이미지가 생성되고, 실행하는 컴퓨터에서 모니터 해상도 또는 DPI 정보가 달라지면 이미지 서치가 실패하게 됩니다. 좀 더 러프한 이미지 매치는 정상적으로 동작하기도 합니다. 윈도우 배율 및 레이아웃을 알면 고객에게 메시지를 표시해서 알려줄 수 있고, 배율에 따라 이미지 폴더를 스위치해서 처리할수도 있습니다.

    rSDNyjL.png

     

     

    개발자들도 항상 다른 환경에 대한 표준화 문제로 많은 시행착오를 겪어 왔습니다. 대표적으로 웹 개발이 그렇죠^^; 웹 표준을 따르지 않는 웹브라우저(익스플로러등등...)들을 위해 별도의 코딩이 필요했습니다. 상당한 노가다였죠-_-; 지금은 안드로이드폰의 디스플레이 크기가 달라서 또다른 노가다가 발생했죠. 스마트폰 앱 개발자들에게는 상당히 귀찮은 일입니다. 그래서, 디스플레이 크기에 다이나믹하게 핏 해주는 반응형 웹으로 프로젝트를 많이 진행합니다. 네이티브인 경우 어쩔수 없이 노가다를 해야하긴 합니다^^;

    F96xEkb.png

     

     

    윈도우 배율 및 레이아웃 값을 가져오는 커스텀 액션을 하나 만들어보겠습니다. Visual Studio 2019 Community를 실행하고, 새 프로젝트를 추가하세요. 프로젝트명은 임의로 작성해도 되지만, 커스텀 모듈을 사용하려면 Custom으로 시작해야 합니다. 이 예제에서는 CustomScaleAndLayout으로 만들었습니다.

    HFwsjwZ.png

     

     

    클래스는 ScaleModel.cs로 만듭니다. 전체 코드는 아래와 같습니다.

    using NGM.Interface;
    using System;
    using System.ComponentModel;
    
    namespace CustomScaleAndLayout
    {
        /// <summary>
        /// 윈도우 배율이 100%인지 체크합니다. 윈도우 배율이 100%면 True를 반환합니다.
        /// </summary>
        [Serializable]
        public class ScaleModel : NGM.Models.Interface.BaseCustomConditionFunctionModel
        {
            /// <summary>
            /// 사용자 함수에 표시되는 카테고리 이름입니다.
            /// </summary>
            public override string DisplayCategory => "NGMsoftware";
    
            /// <summary>
            /// 이 액션의 이름입니다.
            /// </summary>
            public override string DisplayName => "윈도우 배율 체크";
    
            /// <summary>
            /// 윈도우 배율이 100%인지 체크합니다. 윈도우 배율이 100%면 True를 반환합니다.
            /// </summary>
            [Category("Data")]
            [DisplayName("현재 윈도우 배율")]
            [Description("현재 윈도우의 배율을 표시합니다.")]
            [Browsable(true)]
            [DefaultValue(null)]
            public int? ScaleData { get; set; } = null;
    
            /// <summary>
            /// 윈도우의 배율 및 레이아웃에서 배율 값을 비교하고 처리합니다.
            /// </summary>
            /// <param name="mainView"></param>
            /// <param name="player"></param>
            /// <returns>윈도우 배율이 100%라면 True를 아니면 False입니다.</returns>
            public override bool? Execute(IMainView mainView, IPlayer player)
            {
                try
                {
                    // 윈도우의 배율을 가져옵니다.
                    float scale = NGM.API.Window.GetScalingFactor();
    
                    // 단정밀도 부동 소수점을 100분율로 변환합니다.
                    ScaleData = (int)(scale * 100);
    
                    // 배율이 100프로인지 판단합니다.
                    return ScaleData == 100;
                }
                catch (Exception ex)
                {
                    if (mainView != null && mainView.ShowDebugOutput)
                    {
                        mainView.WriteOutput($"Error {ex.Message}");
                    }
    
                    // 에러가 발생하면 속성을 초기화 합니다.
                    ScaleData = null;
    
                    // 에러가 발생하면 null을 반환합니다.
                    return null;
                }
            }
        }
    }

     

    프로젝트를 컴파일하세요. 아래 그림과 같이 프로젝트에서 우클릭 후 "다시 빌드"를 클릭하시면 됩니다.

    srgZm7a.png

     

     

    컴파일이 정상적으로 완료 되었으면, CustomScaleAndLayout 프로젝트에서 우클릭 후 "파일 탐색기에서 폴더 열기"를 선택하세요.

    l6uhRx7.png

     

     

    bin/Debug 폴더로 이동하세요. 만약, Release 모드로 컴파일했다면 bin/Release 폴더로 이동해야 합니다. 가급적이면 배포시에는 Release로 컴파일하세요. 아래 그림과 같이 CustomScaleAndLayout.dll이 있을겁니다. 이 라이브러리를 복사한 후 바탕화면에 붙여넣기하세요.

    5rJYiCo.png

     

     

    엔지엠 에디터를 실행한 후 "관리자" 메뉴의 "함수 모듈 설치" 버튼을 클릭하세요.

    ySJp52M.png

     

     

    모듈이 정상적이라면 아래와 같이 설치 작업이 성공했다는 메시지를 표시합니다.

    baqVyFP.png

     

     

    사용자 함수 상자에 보면 추가한 모듈의 액션이 추가된 것을 확인할 수 있습니다. 새로운 스크립트를 생성하고, 액션을 추가하세요.

    MaaZnBa.png

     

     

    실행 해보면, 아웃풋에 현재 윈도우 배율이 100 프로라고 알려줍니다. 액션의 속성에도 결과가 저장됩니다. 이 값을 변수에 저장해서 다른 처리가 가능합니다. 여기서 다른 처리라는 것은 사용자에게 메시지를 표시해서 배율을 100 프로로 맞추고 다시 실행하라거나 에디터의 이미지 폴더 설정 옵션을 해당 배율에 맞게 변경 후 스크립트가 실행되도록 할 수 있습니다.

    9FtIkmH.png

     

     

    테스트를 위해 "디스플레이 설정"에서 "배율 및 레이아웃"을 150%로 변경하세요.

    YpmllV6.png

     

     

    스크립트를 다시 실행 해보세요. 아래와 같이 배율이 150으로 표시됩니다.

    QEVEni3.png

     

     

    이 예제에서 사용된 액션은 커스텀 모듈에 있으니 직접 개발이 어려운 경우 다운로드 받아서 사용할수도 있습니다. 이 커스텀 모듈을 다운로드 하려면 [ 여기 ]를 클릭하세요.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.