NGMsoftware

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

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

    팁 앤 테크

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

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

    기타 동적인 컨트롤을 핸들링하는 방법.

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. NGM 사용자분중에 동적 컨트롤을 어떻게 핸들링해야 하는지 질문한 내용이 있어서 팁을 작성하게 되었습니다. 우선, 장황하게 설명은 했지만 개발자가 아니라면 이해하기 어려운 내용이기에 좀 더 풀어서 설명하고 예제를 만들어 보도록 하겠습니다.

    img.jpg


     

     

    윈도우는 정적인 컨트롤과 동적인 컨트롤로 구분됩니다. 쉽게 예를 들어보면 이렇습니다. 지금 이 글을 읽고 있는 웹브라우저(크롬, 사파리, 파이어폭스, 익스플로러 등등...)는 페이지가 탭으로 구성되어 있죠? 네 그렇습니다. 지금 이 글은 어떤 탭에 속해있다는 걸 알 수 있습니다. 그렇다면 크롬에서 새 탭을 추가하는 + 버튼을 눌러보면 빈 탭이 추가됩니다. 이 글을 보고 있는 탭은 정적인 컨트롤입니다. 현재 시점에서 + 버튼을 눌러서 새 탭을 추가하기 전까지는 어떤것도 존재하지 않죠? 하지만 + 버튼을 눌러서 탭을 추가하면 새로운 페이지가 열린다는건 모두가 알고 있습니다. 이렇듯 어떤게 보여질지 알지만 실체는 없는 컨트롤들을 전부 동적 컨트롤이라고 부릅니다.

    img.gif


     

     

    개념이 어려운가요^^? 용어가 정적(Static)과 동적(Dynamic)이라고 부르긴 하지만 좀 더 근본적으로 접근해보면 정적은 변화하지 않는 또는 불변성과 같은 의미를 가지고 있습니다. 전통적인 프로그래밍에서 보면 어떤 객체가 메모리에 로드되면 그 주소는 변화하지 않는다는 의미로 사용됩니다. 개발자들은 이미 알고 있겠지만... Static 키워드가 붙어 있는 변수(참조 객체를 포함한)들은 응용프로그램이 종료되어 메모리가 해제될 때까지 유지되는 것을 알 수 있습니다.

    img.gif


     

     

    동적은 정적의 반대말입니다. 정적이 고정되어 있다는 의미이므로 동적은 고정되지 않은 또는 역동적인 뜻을 가집니다. 우리가 흔히 보고 사용하는 DLL(Dynamic Link Library)이 대표적이죠. 동적은 어떤 명세를 나타냅니다. 추상적이든 구상적이든 말이죠. 한가지 더 집고 넘어가면 추상적이란 뜻은 사람, 개, 고양이, 자동차, 남자, 여자와 같은 것들입니다. 구상적인것은 뭘까요? 실제로 존재하는 것들을 말합니다. 사람은 추상적이지만 빌 게이츠나 스티븐 잡스는 구상적이죠. 차이점을 아시겠죠?

    img.gif


     

     

    자 이제 정리해보면 정적은 메모리에 주소가 있다는 뜻입니다. 그렇기 때문에 주소로 추적이 가능하죠. 반면에 동적은 주소가 언제 생길지 모르겠지만~ 그전까지는 추적이 불가능합니다. 동적인 컨트롤이 정적인 영역으로 넘어와야만 추적이 가능하다는 뜻입니다. 그래서 정적인 컨트롤은 현실 세계에서 추적하여 잡아낼 수 있지만, 동적인 컨트롤들은 어떤 알 수 없는 행위의 시점(이벤트)부터 추적이 가능하게 되는겁니다.

     

     

    이제 예제를 통해 어떻게 사용해야 하고, 동적인 컨트롤들을 어떻게 추적해야 하는지 알아보도록 하겠습니다. 현재까지 나와있는 매크로중에 동적 컨트롤을 추적해서 핸들링할 수 있는 매크로는 NGM이 유일합니다^^; 그 이유는 미래에 언제 생길지 모르는 컨트롤일지라도 어디에 나타나는지 알면 추적이 가능합니다. 주소로 찾는게 아니라 어디에 나타날지 알기 때문에 추적하여 잡을 수 있게 되는 원리입니다. 여기서 한가지 의문이 듭니다. 어디에 나타날지 않다는 건 주소를 아는거 아닌가라고 말이죠. 프로그래밍의 세계에서는(사실은 윈도우라는 플랫폼) 주소는 메모리의 주소를 나타냅니다. 그리고 NGM은 메모리 주소가 아닌 컨트롤의 구조를 파악해서 미래에 나타날 위치를 기반으로 메모리 주소를 찾아가는 방식입니다. 복잡해 보이지만, 예제를 한번 따라해보면 쉽게 이해할 수 있을겁니다.

    img.gif


     

     

    준비물은 NGM과 카카오톡입니다. 아래와 같이 새로운 스크립트를 추가하세요. 그리고 핸들 추가와 이미지 서치 액션을 추가해줍니다. 아래 그림은 핸들 추가가 선택되어 있는데요. 이미지 서치를 클릭하여 선택해두세요.

    img.png

     

     

    적당한 이미지를 선택하고 Ctrl+C를 눌러서 클립보드에 저장하세요. 그리고, ①붙여넣기(Ctrl+V)하면 "클립보드 이미지 전송"창이 표시됩니다. 여기서 Ctrl+Print Screen을 눌러서 NGM의 캡쳐 모드로 들어갑니다. ②전송 버튼을 적당하게 캡쳐하여 저장하세요.

    img.png

     

     

    아래 그림과 같이 창 핸들을 추가하세요. ①핸들 추가를 선택하세요. ②컨트롤 찾기를 클릭하고, ③붙여넣기(Ctrl+V)를 수행합니다. ④"클립보드 이미지 전송"창으로 마우스를 이동한 후 F1을 눌러서 핸들을 추가하세요. 

    img.png

     

     

    테스트를 위해 아래와 같이 설정하세요. 핸들 추가의 ①실행 전 지연에 3,000을 입력합니다. ②스크립트를 실행하고, ③붙여넣기(Ctrl+V)를 수행합니다. ④로그 내용을 확인 해보세요. 

    img.png


     

     

    생각과는 다른 결과가 나와서 놀라고 있을지도 모르겠습니다. 분명 핸들도 있고 컨트롤도 있는데 이미지를 가져오지 못한걸 알 수 있죠. 이는 동적으로 생성되는 위치가 사실과 다르기 때문입니다. 그래서 실체화 된 후 실행되어도 이미지를 찾을 수 없게 됩니다.

    img.png

     

     

    이번에는 정상적으로 동작하게 만들어보죠. 핸들 추가에서 컨트롤 찾기를 누른 후 카카오톡 대화방을 선택하세요. 아래 그림처럼 전체를 선택해야 합니다.

    img.png

     

     

    아래 그림을 참고해서 팝업을 하나 추가해주세요. 카카오톡의 클립보드 이미지 전송창은 팝업창이더라구요^^; ①컨트롤 위치를 클릭하고, ②추가를 누릅니다. ③노드를 Popup으로 선택하고 ④확인 버튼을 누르세요.

    img.png

     

     

    테스트를 위해 ①시작 버튼을 클릭하세요. ②붙여넣기하세요. ③이번에는 이미지가 정상적으로 찾아진걸 확인할 수 있습니다.

    img.png

     

     

    설명이 복잡하고 어려운 용어들이 사용되어 거부감이(?) 느껴질수도 있습니다. 하지만, 알고보면 그렇게 어렵지 않은 작업입니다. 윈도우의 모든 프로그램은 구조적이며 어느정도 예측 가능합니다. 그렇기에 특별한(?) 프로그램을 사용하지 않더라도 카카오톡이나 웹브라우저처럼 간단한 프로그램들은 얼마든지 제어가 가능합니다. 물론, 복잡도가 높아질수록 이것 저것 신경써야 할것들이 많아지긴 하지만요. 결국 매크로는 노력과 시간을 많이 투자해야 좋은 제품이 나오기 마련입니다. 하지만... 어느정도 경지에 오르면 또 금방 싫증나는 작업이기도 하죠^^;

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

    댓글목록

    등록된 댓글이 없습니다.