본문 바로가기
게임

매크로 강좌. (C# 메크로 만들기)

by ngmaster 2022. 2. 5.
반응형

C# 매크로 강좌, 주식 트레이더 자동화, 업무 자동화, 소프트웨어 품질 테스트, 프로그래밍 교육

매크로 커뮤니티, 업무용 매크로 제작 의뢰, 무료 매크로 다운로드 http://ngmsoftware.com 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

안녕하세요. 엔지엠소프트웨어입니다. [ 1부 파이썬 메크로 만들기 ]에 이어 2부에서는 C#으로 메크로를 만드는 방법에 대해 알려드리겠습니다. 파이썬은 잘 만들어진 패키지들이 존재하기 때문에 개발자라면 하루만에 원하는 매크로를 만들 수 있을정도로 정말 쉽습니다. 비개발자라도 일주일이면 가능할정도죠^^; 물론, 자동화하는 업무의 복잡도와 작업자(개발자 또는 일반인)의 이해력과 응용력에 따라 1주일에서 2주일정도 감안하면 될거 같습니다. 가장 쉬운건 엔지엠 에디터를 사용하는거지만요^^;

 

C# 메크로 만들기

 

 

C#은 파이썬보다 어려울 수 있습니다. GUI까지 갖추려면 더 많은 시간과 노력이 필요합니다. 그렇더라도 비주얼 스튜디오라는 막강한 무료 도구가 있어서 몇번 만져보다보면 누구나 쉽게 GUI를 구성해서 사용할 수 있습니다. 자바 개발자가 C#으로 넘어오더라도 크게 문제되지 않는 수준이거든요. 반대로 C# 개발자는 자바로 넘어가기가 쉽습니다. GUI를 신경쓰지 않고 비즈니스 로직만 구현하면 되니까요. UI 스레드와 작업자 스레드로부터도 자유로워요. 아무튼, C#으로 매크로를 개발하기 위한 준비단계라서 개발 환경을 갖추는것부터 하나씩 알아보도록 하겠습니다. 우선 Visual Studio Community를 [ 여기 ]에서 다운로드 받은 후 설치하세요. 설치 방법은 아래 글을 참고하세요.

비주얼 스튜디오 설치하기 ]

 

비주얼 스튜디오를 실행하기 전 중요한 설정이 있습니다. 이 내용을 설정하지 않으면 앞으로 개발하는데 문제가 발생하더라도 원인을 찾기가 상당히 어려워집니다. 아래 그림과 같이 설치한 비주얼 스튜디오에서 우클릭 후 자세히 > 파일 위치 열기를 클릭 하세요.

 

 

비주얼 스튜디오에서 우클릭 후 속성을 클릭하세요.

 

 

고급 버튼을 클릭하세요.

 

 

관리자 권한으로 실행에 체크하고, 확인을 클릭하세요.

 

 

개발할 때 관리자 권한으로 실행해야 합니다. 당연한 말이겠지만, 매크로 프로그램이 다른 프로그램을 제어해야 하기 때문에 높은 권한이 필요합니다. 그래서, 비주얼 스튜디오를 관리자 권한으로 매번 실행할 수 있도록 설정한겁니다. 추후에는 직접 만든 프로그램도 관리자 권한으로 실행될 수 있도록 처리해야 하는데요. 이건 차차 알아보기로 하고, C#을 개발하기 위한 비주얼 스튜디오를 실행 해봅시다. 여러분들은 아래 그림처럼 코딩되어 있지는 않을겁니다.

 

 

비주얼 스튜디오를 실행한 후 "새 프로젝트 만들기"를 클릭하세요.

 

 

Windows Forms 앱(.NET Framework) 프로젝트를 만들기 아래 그림을 참고해서 따라해보세요.

  1. 언어는 C# 선택
  2. 플렛폼은 Windows 선택
  3. 프로젝트 형식은 데스크톱 선택
  4. Windows Forms 앱(.NET Framework) 선택
  5. 다음 클릭

 

 

프로젝트 이름에 MyPlayer를 입력한 후 위치를 설정하세요. 이 예제에서는 기본 위치를 사용합니다. 마지막으로 프레임워크를 4.6.1로 선택하고 만들기를 클릭하세요.

 

 

여기까지 하면 아래와 같은 윈폼 프로젝트가 생성됩니다. 현업에서는 Windows Forms를 줄여서 윈폼이라고 부릅니다. 보시면 아시겠지만~ 엔지엠 에디터와 비슷한 화면 구성을 가지고 있습니다. 대부분의 IDE가 이런 구성을 가지는데요. 가장 효율적으로 많은 정보를 표시할 수 있는 UI/UX라고 보면 될거 같습니다. 저는 뭔가 할때마다 새창이 뜨는걸 별로 안좋아 합니다. 작업의 흐름을 방해하기 때문이죠^^;

 

 

여기까지해서 C# 매크로를 만들기 위한 준비를 마쳤습니다. 이제 매크로를 실행하고, 중지할 수 있는 버튼을 만드는것부터 시작해야 합니다. 아래 동영상을 참고해서 버튼 2개를 추가하고, 각각 표시할 텍스트를 "실행"과 "중지"로 수정 해주세요.

 

 

각각의 버튼을 더블 클릭하면 버튼을 눌렀을 때 동작해야 하는 이벤트 처리기를 자동으로 추가 해줍니다.

 

 

C#에는 윈도우에 마우스 이벤트를 줄 수 있는 기능이 없습니다. 그래서, 윈도우 API인 win32 라이브러리를 이용해야 합니다. 다행스럽게도~ C나 C++처럼 윈도우 라이브러리를 쉽게 가져와서 사용할 수 있습니다. 이제 마우스 클릭에 대한 코드를 작성 해볼까요? 아래 2줄을 추가하세요.

        const uint LBUTTONDOWN = 0x0002;    // 왼쪽 마우스 버튼 누름
        const uint LBUTTONUP = 0x0004;      // 왼쪽 마우스 버튼 땜

 

전체 코드는 아래와 같습니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MyPlayer
{
    public partial class Form1 : Form
    {
        const uint LBUTTONDOWN = 0x0002;    // 왼쪽 마우스 버튼 누름
        const uint LBUTTONUP = 0x0004;      // 왼쪽 마우스 버튼 땜

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }
    }
}

 

주석(// ...)에도 설명을 달아두었지만, 마우스 클릭은 기본적으로 마우스를 누르고 때는 동작을 말합니다. 그렇기 때문에 LBUTTONDOWN과 LBUTTONUP으로 윈도우에 신호를 줘야 합니다. 신호 값은 0x0002와 0x0004와 같은 16진수 값입니다. 이 값은 컴퓨터 언어로 우리가 외워서 사용하기는 쉽지 않습니다. 2개정도야 뭐 문제가 안되겠지만요^^; 매크로를 만들다보면 무수히 많은 비트 값을 처리해야 하는데요. 이런 값들을 사용하기 쉽게 하려고 이름을 지어준다고 생각하시면 이해하기 쉬울겁니다. 아래와 같이 win32 라이브러리를 추가 해줍니다.

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace MyPlayer
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);

        const uint LBUTTONDOWN = 0x0002;    // 왼쪽 마우스 버튼 누름
        const uint LBUTTONUP = 0x0004;      // 왼쪽 마우스 버튼 땜

 

그냥 알아보기 쉽게 숫자를 사용하면 될텐데 왜 16진수를 사용하는지 약간 궁금할수도 있습니다. 16진수는 0부터 F까지 16개의 수를 가집니다.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

 

대부분의 프로그래밍 언어에서 숫자(Integer)는 2바이트로 이루어져 있습니다. 1바이트는 8비트로 이루어져 있죠. 그래서 숫자형은 16비트입니다. 8비트를 반으로 나누면 4비트가 되는데 4비트는 1부터 16까지 표현이 가능합니다. 이는 컴퓨터의 CPU가 한번에 처리할 수 있는 최소 단위와 동일해서 2진수와 변환이 쉬운 16진수를 사용하게 되었습니다. 그래서 16비트의 숫자형에는 0xFFFF까지 넣을 수 있습니다. 요즘은 32비트, 64비트를 한번에 처리할 수 있습니다. 초창기에 컴퓨터 처리 단위가 지금까지 이어져서 사용된다고 이해하면 되겠습니다^^; 홈페이지 어딘가에... CPU, Memory, 컴퓨터에 대해 작성해둔 글이 있는데 한번 찾아보시면 좋을거 같네요.

 

위 코드에서 불필요한 using은 제거한 상태입니다. 일단, DllImport는 비관리 라이브러리에서 정적 메소드를 사용할 수 있도록 해주는 C# 특성(Attribute)입니다. 점점 어려운 용어들이 나오고 있어서... 설명해야 하나 말아야 하나 고민이 깊어집니다. 개발자라면 그냥 아는 이야기들인데요. 이걸 설명하려면 또 많은 시간을 잡아먹을듯 하군요. 여러분들은 단순히 비관리(C나 C++로 만들어진 동적 라이브러리) 기능을 가져다가 쓸 때 이 특성을 이용하면 된다고 이해하시면 됩니다. 바탕화면의 아이콘들의 좌표를 알아내기 위해 엔지엠 에디터를 실행하고, 마우스 액션을 하나 추가 해줍니다.

엔지엠 에디터 무료 버전 다운로드 받기 ]

 

 

우측 속성창에서 마우스 좌표 속성을 선택하세요. 그러면, 우측에 "..." 버튼이 표시됩니다.

원본 글 보기 http://ngmsoftware.com/bbs/board.php?bo_table=study&wr_id=576 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글