NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET Core 매크로 프로그램 만들기. (비활성 매크로 만들기 2부)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 차세대 매크로 프로그램의 이름을 어떤걸로 할지 고민이 많습니다. 일단 편의를 위해 엔지엠 7을 사용중인데요. 아마도 정식 출시하는 시점에는 이름을 변경할거 같아요. 뭔가 좀 신박하고 임펙트 있는 이름이었으면 좋겠는데... 좀 더 고민해봐야 겠습니다. 이전 시간에 [ 비활성 매크로 만들기 1부 ]를 진행했습니다. 개발자분들이라도 작성된 글 내용만 보고 따라서 만들기는 어려울겁니다. 개발자 경력이 10년 이상이라면, 대략적인 디자인과 설계 내용을 토대로 구글 검색 및 구현 부분을 직접 처리할 수 있을건데요. 사실, 제가 봐도... 별 도움이 안될거 같긴 합니다.

     

    개발 관련된 내용을 자세하게 적을 수 없는 가장 큰 이유는 아직도 어떻게 설계하고 디자인을 해야 할지 고민이 많기 때문입니다. 막상 코드를 작성해두고 글을 적으려고 하면 또다시 수정해야 하는 경우가 비일비재합니다. 이 글도 몇일전부터 작성하려고 글을 쓰다가 지우기를 몇번 했습니다. 오늘에서야 어느정도 기능이 정리가 되어서 작성하게 되었는데요. 디자인적으로 아름답지 않아서 지금도 고민하고 있습니다^^;

     

    비활성 매크로의 핵심은 윈도우 프로그램의 핸들을 어떻게 제어할 수 있는지에 달려 있습니다. 이전 시간에는 그림판에서 테스트 했는데요. 오늘은 메모장에서 테스트를 진행하도록 하겠습니다. 여러분들도 아래 그림과 같이 메모장을 3개 실행 해두었습니다. 그리고, 에디터의 스크립트에 핸들 추가 액션을 하나 추가했습니다.

    WYW6XHc.jpeg

     

     

    엔지엠 6과는 다르게 새로운 매크로 프로그램에서는 스크립트 하나에 멀티로 핸들을 설정할 수 있습니다. 이번 시나리오는 모두 같은 창 제목을 가진 경우에 대한 내용입니다. 하지만, 창 제목이 모두 다른 경우라도 멀티 제어는 가능합니다. 창 제목이 모두 다른 시나리오에서는 엔지엠 6과 동일하지만, 하나씩 추가해야 하는 부분은 다릅니다.

     

    메모장을 선택했습니다. 아래 그림과 같이 창 제목이 모두 같지만, 3개가 모두 추가된 것을 확인할 수 있습니다.

    AcKXMvZ.jpeg

     

     

    멀티로 제어하려면 추가 옵션AddSelectAll로 선택해야 합니다.

    2h8yUZV.jpeg

     

     

    비활성 방식으로 입력하기 때문에 장치 입력 방법 액션도 추가하세요. 그리고 입력 방식을 비활성 모드인 PostMessage로 변경하세요.

    Mh0lsg9.jpeg

     

     

    키보드의 텍스트 쓰기 액션을 추가하세요. 그리고, 캐리지 리턴 제거를 True로 변경해주세요. 캐리지 리턴은 윈도우의 줄바꿈 코드의 문제가 있는 경우 사용합니다. 일반적으로 줄바꿈은 \n을 사용하는데요. 윈도우는 오래전부터 \r\n을 사용해왔습니다. 그렇다보니 현재에 와서 여러가지 문제들이 발생합니다. \n이나 \r\n 모두 한줄 처리가 되어야 하는데요. 일부 프로그램들은 두줄로 처리하기 때문에 캐리지 리턴 코드를 제거해야 원본과 동일하게 입력됩니다.

    gYIXle3.jpeg

     

     

    메모장에 쓸 내용을 쓰기 액션의 텍스트 속성에 입력하세요. 예제로 입력한 내용은 아래와 같습니다.

    안녕하세요. 엔지엠소프트웨어입니다.
    http://ngmsoftware.com
    

     

    매크로를 실행하면 아래와 같이 모두 텍스트 쓰기가 실행됩니다.

     

     

    이번에는 텍스트를 좀 천천히 기록하도록 해볼가요? 아래 동영상처럼 입력 속도10으로 변경하고 다시 실행해보세요. 메모장 순서대로 하나씩 글쓰기가 실행되는걸 확인할 수 있습니다. 위에서는 지연 없이 입력하다보니 모두 동시에 처리되는것처럼 보이지만, 사실은 하나씩 순서대로 처리된다는걸 알 수 있습니다.

     

     

    만약, 동시에 여러 프로그램에 신호를 주고 하나의 스크립트지만, 핸들 수만큼 독립적으로 실행되도록 하려면 어떻게 해야 할까요? 아래 그림과 같이 핸들 추가 액션의 비동기 모드 사용 속성을 True로 변경하면 됩니다. 이렇게하면 핸들이 모두 개별적인 스크립트인것처럼 동작합니다.

    zrnBaxn.jpeg

     

     

    매크로를 실행하면 동기 모드와 다르게 메모장에 모두 동시에 글이 작성됩니다. 키보드 간섭 문제도 발생하지 않기 때문에 정상적으로 입력됩니다.

     

     

    로그를 보면 아래와 같이 비동기적으로 실행된걸 확인할 수 있습니다. 장치 입력 방법과 쓰기 액션이 3번 실행되었습니다. 독립적으로 동작한다는걸 알 수 있고, 첫번째와 두번째를 보면 장치 입력 방법이 실행되고, 두번째 핸들에서 장치 입력 방법이 실행되었습니다. 그리고, 쓰기가 동작했네요. 세번째 핸들은 마지막에 혼자 실행되었다는걸 확인할 수 있습니다. 실행할 때마다 랜덤으로 아웃풋 로그가 찍힐겁니다. 윈도우가 효율적으로 작업을 배분해주니까요.

    핸들 추가
    매인 핸들:68790
    컨트롤 핸들:68794
    매인 핸들 목록:68790,68812,462048
    컨트롤 핸들 목록:68794,68816,68866
    프로세스 아이디:27688
    
    장치 입력 방법
    장치 입력 방법
    쓰기
    쓰기
    장치 입력 방법
    쓰기
    

     

    여기서 약간 비효율적인 부분이 있습니다. 장지 입력 방법은 모두 동일한데요. 이게 3번이나 실행되었다는겁니다. 한번만 실행되어도 문제는 없거든요. 장치 입력 방법은 글로벌하게 적용되는 옵션이라서 모든 스크립트에서 처리할 필요는 없습니다. 핸들 추가를 비동기로 설정하면 이 액션 위로 추가되어 있는 액션들은 한번만 실행되고, 이후 액션들만 자동으로 핸들 수만큼 자동 생성합니다. 이번에는 장치 입력 방법 액션을 핸들 추가 액션 위로 이동하고 실행 해볼께요.

    oe6dFQP.jpeg

     

     

    아웃풋 로그는 아래와 같습니다. 장치 입력 방법이 먼저 실행되고, 비활성으로 핸들 수만큼 자동 분배 되었습니다. 그래서, 쓰기만 3번 실행된걸 알 수 있습니다.

    장치 입력 방법
    핸들 추가
    매인 핸들:68790
    컨트롤 핸들:68794
    매인 핸들 목록:68790,68812,462048
    컨트롤 핸들 목록:68794,68816,68866
    프로세스 아이디:27688
    
    쓰기
    쓰기
    쓰기
    

     

    참고로, 아웃풋에서 파란색으로 표시되는 로그는 비활성 매크로가 비동기로 실행된다는 뜻입니다. 아웃풋의 내용을 좀 더 잘 활용하기 위해 색깔로 구분해서 표시할 예정인데요. 이 부분도 정형화해서 홈페이지에 정리를 해두어야 할거 같습니다. 지금은 임시로 파란색으로 해두었습니다. 조건의 참과 거짓 그리고, 목록이나 동기와 비동기등등... 다양한 상황들을 로그의 내용과 색상으로 빠르게 분석할 수 있도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.