매크로 프로그램 다운로드
http://ngmsoftware.com/bbs/board.php?bo_table=product_review
엔지엠소프트웨어
엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.
www.ngmsoftware.com
#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #오토핫키 #지존오토 #엔지엠에디터 #엔지엠플레이어 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #이미지맥스 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화
안녕하세요. 업무 자동화 RPA 매크로 엔지엠소프트웨어입니다.
우선, 아래 1부 내용을 참고하셔서 전체 사각형 영역을 찾아내야 합니다.
[ 1부 내용 보기 ]
1부에서 테스트로 만든 스크립트를 열어보면 아래와 같이 구성되어 있을겁니다.
핵심은 유사 거리로 중복되게 찾은 오브젝트들을 모두 제거해야 한다는 것입니다.
컴퓨터 환경에 따라 다르겠지만, 제 컴퓨터 기준으로 모든 사각형을 찾으려면 임계값을 1000으로 입력해야 했습니다.
임계값은 컴퓨터 모니터의 해상도에 따라서 값이 달라질 수 있습니다.
찾은 모든 좌석 사각형은 배열 형태로 사각형 영역을 가집니다.
사각형 영역은 위치와 크기로 이루어진 정보입니다.
변수에 저장된 배열을 문자열로 변환하기 위해 배열 변환 액션을 사용합니다.
구분자는 임의로 설정할 수 있지만, 이 예제와 동일하게 입력하세요.
이제 좌석을 의미하는 사각형의 위치를 배열로 가지고 있는것을 사용하기 쉽게 테이블 형태로 변환해야 합니다.
물론, 더 좋은 아이디어가 있을수도 있지만 제가 생각하기에는 쭉 나열되어 있는 배열보다 테이블 형태가 좋을듯 합니다.
단순 1차원 배열은 모든 좌표가 쭉 순서대로 있기 때문에 2차원 배열 형태로 처리하기가 쉽지 않습니다.
그래서, 테이블 구조를 가진 2차원 배열로 만들어야 하는데요.
이 로직을 액션으로 만들기가 어렵기 때문에 어쩔 수 없이 코드의 도움을 받아야 합니다.
C# 코드 실행 액션을 추가하고 아래와 같이 코드를 작성 하세요.
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
public class NGMsoftware
{
private int _rowSize = 1;
public string Points()
{
var arrSource = "{point}"
.Replace("{", string.Empty)
.Replace("}", string.Empty)
.Replace("X=", string.Empty)
.Replace("Y=", string.Empty)
.Replace("Width=", string.Empty)
.Replace("Height=", string.Empty)
.Replace(" ", string.Empty)
.Split('^');
var arrRect = arrSource.Select(s => StringToRect(s));
List<List<Rectangle>> table = new List<List<Rectangle>>();
List<Rectangle> rects = null;
int beforeRowSize = 0;
foreach (var rect in arrRect)
{
if (beforeRowSize == 0)
{
beforeRowSize = rect.Y;
rects = new List<Rectangle>();
}
if (rect.Y - beforeRowSize > _rowSize)
{
table.Add(rects);
beforeRowSize = rect.Y;
rects = new List<Rectangle>();
rects.Add(rect);
}
else
{
rects.Add(rect);
}
}
table.Add(rects);
string result = string.Empty;
foreach (var rs in table)
{
result += string.Join("@", rs.Select(s => RectToPoint(s)));
result += Environment.NewLine;
}
return result;
}
public Rectangle StringToRect(string str)
{
var ls = str.Split(',');
return new Rectangle(int.Parse(ls[0]), int.Parse(ls[1]), int.Parse(ls[2]), int.Parse(ls[3]));
}
public string RectToPoint(Rectangle rect)
{
int w = rect.Width / 2;
int h = rect.Height / 2;
return (w + rect.X).ToString() + "," + (h + rect.Y).ToString();
}
}
코드는 나열되어 들어오는 사각형 자료형을 사용하기 쉽게 먼저 가공합니다.
Replace를 이용해서 불필요한 텍스트는 모두 제거했습니다.
코딩을 배우는건 아니라서 대략적인 내용만 보고 넘어가시는게 좋을듯 합니다.
만약, C# 코딩에 대해 궁금하신게 있거나 배워보고 싶으면 아래 C# 코딩 강좌를 참고하세요.
[ C# 코딩 기초 강좌 ]
매크로를 실행하고 결과를 확인 해보세요.
아래는 테이블 형태로 변환된 좌표를 뽑아서 메모장에 넣어본 화면입니다.
메모장에 들어간 내용을 위의 좌석과 비교해보면 비슷한 모양을 하고 있다는걸 알 수 있습니다.
여기서 몇번째 행에서 좌측 또는 우측에서 몇개만 추출하도록 코드를 수정해볼께요.
아래와 같이 테이블을 모두 조인시켜주는 곳에서 6번째 행에서 왼쪽 5개를 가져오도록 수정했습니다.
string result = string.Empty;
var rows = table[5];
var cells = rows.Take(5).ToList();
result = string.Join("@", cells.Select(s => RectToPoint(s)));
return result;
}
public Rectangle StringToRect(string str)
{
var ls = str.Split(',');
return new Rectangle(int.Parse(ls[0]), int.Parse(ls[1]), int.Parse(ls[2]), int.Parse(ls[3]));
}
public string RectToPoint(Rectangle rect)
{
int w = rect.Width / 2;
int h = rect.Height / 2;
return (w + rect.X).ToString() + "," + (h + rect.Y).ToString();
}
}
매크로를 다시 실행하고 결과를 확인해보면 아래와 같이 결과가 만들어집니다.
변수를 하나 더 추가하고, point 변수에 저장되어 있는 텍스트로 된 좌표 목록을 @ 키워드로 분리해서 배열화합니다.
그리고, 다시 point 변수에 덮어쓰기 해줍니다.
Foreach 반복 액션을 사용해서 배열을 순차적으로 반복시킵니다.
여기까지 완료한 후 첨부되어 있는 스크립트를 열어서 테스트 해보세요.
[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]
[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]
원본 글 보기
http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech
엔지엠소프트웨어
엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.
www.ngmsoftware.com
'매크로' 카테고리의 다른 글
vpn 아이피 자동 변경 (0) | 2025.04.20 |
---|---|
오토핫키 자동입력 (0) | 2025.04.20 |
오토핫키 키보드 (1) | 2025.04.20 |
웹페이지 텍스트 전체 추출 (1) | 2025.04.17 |
오토마우스 자동클릭커 설정 (0) | 2025.04.17 |
댓글