본문 바로가기
이미지 매크로

C# .NET Core 매크로 프로그램 만들기. (스크립트 저장 및 불러오기)

by 업무자동화 2024. 3. 7.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #스마트스토어 #슬롯 #조회수매크로 #인스타매크로 #인스타그램매크로 #유튜브매크로 #좋아요매크로 #마케팅매크로 #슬롯매크로 #오토핫키매크로 #파이썬매크로 #네이버카페매크로 #댓글매크로 #블로그매크로 #카카오톡매크로 #가리기매크로 #상품입력매크로 #쿠팡매크로 #쇼피매크로 #코인매크로 #주식매크로 #바이럴마케팅매크로 #추천구독매크로

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 앞서 매크로 프로그램의 기본적인 내용들을 만들었는데요. 이번에는 만든 스크립트를 저장하고, 다시 불러올 수 있는 기능들을 만들어 보도록 하겠습니다. 스크립트 뷰에서 Save 메소드를 먼저 구현해줄께요. 스크립트 인터페이스에 Save 메소드를 하나 추가 해줍니다. 스크립트가 기본적으로 수행해야 할 동작들을 인터페이스로 미리 정의 해두었습니다. 구현은 이제 하나씩 해야겠죠?

namespace Ai.Interface
{
    public interface IScriptView
    {
        void Play();

        void Pause();

        void Stop();

        void Save();

        void Close();
    }
}

 

Script에서 Save 메소드를 아래와 같이 구현해줍니다.

        public void Save()
        {
            SaveFileDialog dialog = new SaveFileDialog();

            if (dialog.ShowDialog() == DialogResult.OK)
                new Ai.Common.File(dialog.FileName).Serialize(treeView.Nodes.Cast<TreeNode>().ToArray());
        }

 

Ai.Common 라이브러리에 Serialize 메소드를 만들고, TreeNode를 넘겨줍니다.

※ NGM 7 프로덕션 제품으로 출시할 때는 TreeNode를 사용하지 않고, WPF를 이용해서 스크립트 뷰를 구성합니다. 현재는 테스트를 위한 임시 코드입니다.

        public void Serialize<T>(T file, string fileName)
        {
            using (var output = System.IO.File.Create(fileName))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(output, file);
            }
        }

 

이제 새로운 스크립트를 만들고, 마우스 클릭 액션을 하나 추가해보세요. 그리고, 메뉴에서 저장을 클릭합니다.

 

 

바탕화면에 저장한 스크립트가 잘 생성되었습니다.

 

 

이제 바탕화면에 만들어진 스크립트를 불러올께요. 파일 메뉴의 OpenScript 이벤트 핸들러에 아래와 같이 코드를 작성합니다.

        private void MenuFileOpenScript(object? sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                var nodes = new Ai.Common.File(dialog.FileName).Deserialize<TreeNode[]>();

                if (_client is Ai.Interface.IEditor)
                {
                    var editor = (Ai.Interface.IEditor)_client;
                    var dockHelper = new DockHelper(_client);

                    string scriptName = Path.GetFileName(dialog.FileName);

                    dockHelper.AttachViews(editor.DockingManager, new Model.Client.DockModel[]
                    {
                        new Model.Client.DockModel()
                        {
                            Name = scriptName,
                            Text = scriptName,
                            TextTitle = scriptName,
                            Description = dialog.FileName,
                            Control = new Ai.Common.Client.View.Script(_client, nodes)
                        }
                    });
                }
            }
        }

 

스크립트를 열기 위해서 OpenFileDialog를 하나 생성 해줍니다. OpenFileDialog는 윈도우에서 파일을 열 때 탐색기를 열어주는 컨트롤입니다. 여러가지 속성들이 있지만, 간단하게 테스트 용도로 파일만 선택할 수 있도록 했습니다. 추가적으로 파일 위치와 파일 형식도 넣어주면 좋겠는데요. 엔지엠 6에서는 엔지엠 매크로 스크립트 확장자인 ngs와 ngi를 자동으로 인식하고, 스크립트와 이미지 폴더를 기본 폴더로 설정해두었습니다.

 

Ai.Common 네임스페이스에 파일을 직렬화하고, 역직렬화 할 수 있는 File 클래스를 하나 만들었습니다. 클래스 이름은 나중에 변경될수도 있을거 같은데요. 지금은 이대로 사용하도록 하겠습니다. 엔지엠 매크로에서 파일을 핸들링하는 다양한 기능들을 여기에 추가할 예정입니다.

 

File 클래스에 스크립트를 역직렬화하는 메소드를 추가했습니다. 다양한 형식을 사용할 수 있게 제네릭 타입으로 만들었습니다. 이렇게 만들지 않으면 형식에 따라서 수많은 메소드를 오버로딩해야 합니다. 비효율적이기 때문에 제네릭 타입을 사용하는게 좋습니다.

        public T Deserialize<T>(string fileName)
        {
            using (var output = System.IO.File.Open(fileName, FileMode.Open))
            {
                BinaryFormatter bf = new BinaryFormatter();
                return (T)bf.Deserialize(output);
            }
        }

 

메뉴에서 열기 > 스크립트를 선택 후 바탕화면에 저장했던 스크립트를 열어보세요.

 

 

스크립트뷰에서 정상적으로 트리뷰가 만들어집니다. 이전 스크립트뷰를 아래와 같이 리팩토링 했습니다. 새 스크립트를 만들때와 스크립트를 열 때 모두 대응해야 해서 아래와 같은 구조가 되었는데요. 생성자 오버라이딩을 통해서 다양한 형식을 가져올 수 있도록 했습니다. 추후에 스크립트뷰를 WPF로 변경할 때 한번 더 리팩토링해야 할듯 합니다. 다음 버전에서는 기존과 같은 방식의 TreeView와 WPF로 만든 Workflow 2가지를 모두 제공할 예정입니다.

        public Script(Ai.Interface.IClient client) : this(client, new List<TreeNode>())
        {

        }

        public Script(Ai.Interface.IClient client, TreeNode[] nodes) : this(client, nodes.ToList())
        {

        }

        public Script(Ai.Interface.IClient client, TreeNodeCollection nodes) : this(client, nodes.Cast<TreeNode>().ToList())
        {

        }

        public Script(Ai.Interface.IClient client, List<TreeNode> nodes)
        {
            _client = client;

            InitializeComponent();

            treeView.AllowDrop = true;
            treeView.ItemDrag += TreeView_ItemDrag;
            treeView.DragDrop += TreeView_DragDrop;
            treeView.DragOver += TreeView_DragOver;
            treeView.DragEnter += TreeView_DragEnter;

            if (nodes != null && nodes.Count > 0)
            {
                treeView.Nodes.AddRange(nodes.Cast<TreeNode>().ToArray());

                if (_client is Ai.Interface.IEditor)
                {
                    var editor = (Ai.Interface.IEditor)_client;
                    ((Dock.Property)editor.Property).DataBind(nodes.First().Tag);
                }
            }
        }

 

이렇게해서 얼추 매크로 에디터의 모든 기능을 만들었습니다. 세부적인 기능과 액션을 추가해야 하지만요^^

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#비활성매크로 #g102매크로 #철권매크로 #레이저마우스매크로 #ghub매크로 #녹화매크로 #키보드반복매크로 #로지텍마우스광클매크로 #플라스크매크로 #윈도우매크로 #비활성g매크로 #오토매크로 #자동사냥 #주식매크로 #오토핫키키보드 #오토핫키마우스 #오토핫키이미지 #지존오토 #기계식매크로 #하드웨어매크로 #무한반복매크로 #대량이메일발송매크로 #엑셀VBA매크로 #주식모니터링매크로 #이미지맥스 #심플핫키 #오토클리커 #UiPath #Brity #스푸퍼 #DKOM #모바일게임매크로 #다클라매크로 #다계정매크로 #인스타그램매크로 #짜맥매크로 #챗굴매크로

반응형

댓글