본문 바로가기
엔지엠 매크로

화면 인식 무료 매크로

by 업무자동화 2021. 8. 1.
반응형

안녕하세요. 엔지엠소프트웨어입니다. 언어별 클래스에 대해 알아보기 전 가벼운 마음으로 마우스 클릭에 대해 알아볼께요^^

 

원본 보기

http://ngmsoftwarec.om 

 

1. C for Visual Studio 2019

#include <windows.h> void MouseMove() { SetCursorPos(300, 300); } void MouseLeftClick() { INPUT Input = { 0 }; // Left down Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; SendInput(1, &Input, sizeof(INPUT)); // Left up ZeroMemory(&Input, sizeof(INPUT)); Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(1, &Input, sizeof(INPUT)); } int main(VOID) { MouseMove(); MouseLeftClick(); }

 

 

이 코드를 실행하면 마우스가 정상 동작하는건 확인할 수 있습니다. 다만, 콘솔창이 표시되서 그림판에 클릭이 안되고 있네요. 코드를 아래와 같이 변경하고 다시 해보세요. 콘솔창이 표시되지 않고 마우스가 그림판을 클릭합니다. C 프로젝트의 속성에서 서브시스템을 콘솔이 아닌 윈도우로 변경해야 합니다.

#include <windows.h> void MouseMove() { SetCursorPos(300, 300); } void MouseLeftClick() { INPUT Input = { 0 }; // Left down Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; SendInput(1, &Input, sizeof(INPUT)); // Left up ZeroMemory(&Input, sizeof(INPUT)); Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(1, &Input, sizeof(INPUT)); } int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { MouseMove(); MouseLeftClick(); }

 

 

2. C++ for Visual Studio 2019

C와 코드가 동일합니다. 프로젝트를 만들 때 콘솔로 만들었기 때문에 링커의 시스템에서 윈도우로 변경하세요.

// ConsoleApplication1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다. // #include <iostream> #include <Windows.h> void MouseMove() { SetCursorPos(300, 300); } void MouseLeftClick() { INPUT Input = { 0 }; // Left down Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; ::SendInput(1, &Input, sizeof(INPUT)); // Left up ::ZeroMemory(&Input, sizeof(INPUT)); Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; ::SendInput(1, &Input, sizeof(INPUT)); } int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { MouseMove(); MouseLeftClick(); } // 프로그램 실행: <Ctrl+F5> 또는 [디버그] > [디버깅하지 않고 시작] 메뉴 // 프로그램 디버그: <F5> 키 또는 [디버그] > [디버깅 시작] 메뉴 // 시작을 위한 팁: // 1. [솔루션 탐색기] 창을 사용하여 파일을 추가/관리합니다. // 2. [팀 탐색기] 창을 사용하여 소스 제어에 연결합니다. // 3. [출력] 창을 사용하여 빌드 출력 및 기타 메시지를 확인합니다. // 4. [오류 목록] 창을 사용하여 오류를 봅니다. // 5. [프로젝트] > [새 항목 추가]로 이동하여 새 코드 파일을 만들거나, [프로젝트] > [기존 항목 추가]로 이동하여 기존 코드 파일을 프로젝트에 추가합니다. // 6. 나중에 이 프로젝트를 다시 열려면 [파일] > [열기] > [프로젝트]로 이동하고 .sln 파일을 선택합니다.

 

 

3. C# for Visual Studio 2019 (Core & .NET)

C#의 경우에는 Core와 .NET 설정이 다릅니다. Core의 경우 플랫폼에 종속되지 않기 위해 닷넷 프레임워크에서 제공하는 Windows 관련 라이브러리를 사용할 수 없습니다. 물론, 프로젝트 파일에서 직접 설정하면 유용한 함수들을 쉽게 사용할 수 있지만 다른 플랫폼(리눅스, 맥)에서 프로그램이 동작하지 않게 되는 단점이 있습니다.

using System; using System.Runtime.InteropServices; namespace ConsoleApp1 { class Program { const int InputMouse = 0; const int MouseEventMove = 0x01; const int MouseEventAbsolute = 0x8000; const int MouseEventLeftDown = 0x02; const int MouseEventLeftUp = 0x04; [DllImport("user32.dll", SetLastError = true)] private static extern uint SendInput(uint numInputs, Input[] inputs, int size); internal struct MouseInput { public int X; public int Y; public uint MouseData; public uint Flags; public uint Time; public IntPtr ExtraInfo; } internal struct Input { public int Type; public MouseInput MouseInput; } static void Main(string[] args) { MouseLeftClick(); } static void MouseLeftClick() { Input[] inputs = new Input[2]; inputs[0] = new Input(); inputs[0].Type = InputMouse; inputs[0].MouseInput.X = (300 * 65535) / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width; inputs[0].MouseInput.Y = (300 * 65535) / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height; inputs[0].MouseInput.Flags = MouseEventAbsolute | MouseEventMove; inputs[1] = new Input(); inputs[1].Type = InputMouse; inputs[1].MouseInput.Flags = MouseEventLeftDown; SendInput(2, inputs, Marshal.SizeOf(inputs[0])); inputs = new Input[1]; inputs[0] = new Input(); inputs[0].Type = InputMouse; inputs[0].MouseInput.Flags = MouseEventLeftUp; SendInput(2, inputs, Marshal.SizeOf(inputs[0])); } } }

 

C#은 윈도우 API를 직접 사용할 수 없습니다. 윈도우 API를 dll로 import한 후 extern을 이용해서 해당 dll의 함수를 호출해야 합니다. extern 한정자는 외부에서 구현된 메소드를 선언하는 데 사용됩니다. extern 한정자는 일반적으로 Interop 서비스를 사용하여 비관리 코드를 호출할 때 DllImport 특성과 함께 사용됩니다. 이 경우 메소드를 static으로 선언해야 합니다.

 

4. Java for Eclipse Enterprise

자바는 마우스나 키보드를 윈도우에 입력할 수 있는 Robot 패키지를 제공하므로 C#보다는 쉽게 사용할 수 있습니다. C#도 누군가가 만들어놓은 수많은 라이브러리가 존재하므로, 자신에게 맞는 것을 잘 찾아서 사용한다면 코드 몇줄로 처리가 가능합니다. 여러분들도 알다시피 개발자가 주로 하는 일은 원하는 기능이 구현된 라이브러리나 패키지가 있는지 찾아보고, 있으면 테스트하고 적용 가능한지 파악 합니다. 마지막으로 라이센스 정책도 파악하죠^^;

import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; public class main { public static void main(String[] args) { try { mouseLeftClick(); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void mouseLeftClick() throws AWTException{ Robot bot = new Robot(); bot.mouseMove(300, 300); bot.mousePress(InputEvent.BUTTON1_MASK); bot.mouseRelease(InputEvent.BUTTON1_MASK); } }

 

 

5. Python for Visual Studio Code

파이썬은 pyautogui 패키지를 사용하면 쉽게~ 마우스와 키보드를 윈도우에 입력할 수 있습니다.

import pyautogui def mouseLeftClick(): pyautogui.moveTo(300, 300) pyautogui.click() mouseLeftClick()

 

 

6. JavaScript for Visual Studio Code

자바스크립트는 윈도우에 마우스나 키보드를 입력할 수 없습니다. 당연한 말이지만~ 웹브라우저에 종속되어 실행되는 언어이기 때문입니다. 예전에는 ActiveX를 브라우저에 심어서 윈도우를 제어할 수 있었지만, 익스플로러의 지원이 종료됨에 따라 이렇게 처리하는것도 쉽지 않은 상태가 되었습니다. Windows 10에는 아직도 익스플로러가 있기 때문에 웹으로 어떤 매크로를 만들고 윈도우를 제어할 수 있습니다. 하지만, 앞으로 나올 Windows 11에서 익스플로러가 삭제되어서 별다른 방법이 없을듯합니다. 엣지에서 옵션을 변경하면 익스플로러처럼 사용이 가능하다고 본거 같긴 하지만... 스트레스 받지 않으려면 포기하세요^^

 

7. NGM Editor & Player

엔지엠 에디터는 마우스 액션을 하나 추가한 후 좌표 값을 300, 300으로 설정하면 바로 동작합니다. 사실, 이 글에서는 개발 도구와 환경을 갖추는 내용이 없습니다. 그래서, IDE만 설치하면 무언가 바로 개발해서 사용할 수 있을거라고 생각할수도 있습니다. 하지만, 개발이라는게 단순히 코딩만 한다고해서 어떤 프로그램이 만들어지는건 아닙니다. 배포와 관련된 부분도 고려해야 하고 눈에 보이지 않는 많은 것들이 어렵게 만드는 요인이 될수도 있습니다. 그렇더라도~ 자신에게 맞는 언어를 하나 선택해서 학습하다보면 그동안 불편했던 많은 부분들이 자동화되고 좀 더 가치있는 일에 집중할 수 있도록 도와줄겁니다.

http://ngmsoftware.com 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글