무료 매크로 프로그램 다운로드
http://ngmsoftware.com/bbs/board.php?bo_table=product1&wr_id=32
#매크로 #매크로프로그램 #메크로 #g매크로 #마우스매크로 #키보드매크로 #엑셀매크로 #키매크로 #수강신청매크로 #로지텍마우스매크로 #매크로키보드 #파이썬매크로 #매크로뜻 #매크로마우스 #로지텍매크로 #ld플레이어매크로 #오토마우스매크로 #키보드마우스매크로 #오토핫키매크로 #이미지매크로 #이미지인식매크로 #하드웨어매크로 #화면인식매크로 #선착순구매매크로 #이미지서치매크로 #한글매크로
안녕하세요. 엔지엠소프트웨어입니다. 얼마전에 다클라 다계정하시는 고객분이 창을 어떻게 정렬할지 문의한적이 있습니다. 보통은 창을 하나씩 선택해서 직접 창 크기와 위치를 설정하면 되긴하는데요. 좀 더 편리하게 작업할 수 있도록 커스텀 모듈을 만들어봤습니다. 대부분은 아마도 [ 윈도우 이동 ], [ 윈도우 크기 ] 액션을 사용하고 있을겁니다. 자~ 커스텀 모듈을 만들기 위해 비주얼 스튜디오를 실행하고, 새로운 프로젝트를 하나 추가 해줍니다.
커스텀 모듈을 만들기 위한 셋팅 및 학습은 아래 게시판을 먼저 학습하고 이 글을 읽어야 합니다.
[ 커스텀 모듈 개발 환경 만들기 ]
어떻게 동작하는지는 아래 동영상을 참고하세요. 10개의 그림판은 미리 등록 해두었습니다. 바둑판 배열은 가로 4, 세로 3입니다.
커스텀 모듈의 전체 소스입니다. 입맛에 맞게 수정해서 사용해도 됩니다^^
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Xml.Serialization;
namespace CustomWindowTileSortModule
{
[Serializable]
public class WindowSorterModel : NGM.Models.Interface.BaseCustomToolModel, NGM.Models.Interface.IHandleModel
{
private string _findControl;
/// <summary>
/// 도구 상자에 표시될 카테고리 이름을 가져옵니다.
/// </summary>
public override string DisplayCategory => "NGMsoftware";
/// <summary>
/// 도구 상자에 표시될 액션 이름을 가져옵니다.
/// </summary>
public override string DisplayName => "창 정렬";
[XmlIgnore]
[Browsable(false)]
[ReadOnly(true)]
public IntPtr MainHandle { get; set; }
[XmlIgnore]
[Browsable(false)]
[ReadOnly(true)]
public IntPtr ControlHandle { get; set; }
[XmlIgnore]
[Browsable(false)]
[ReadOnly(true)]
public string Title { get; set; }
[XmlIgnore]
[Browsable(false)]
[ReadOnly(true)]
public List<NGM.Models.Item.HandleItem> Children { get; set; }
[XmlIgnore]
[Category("Data")]
[DisplayName("창 목록")]
[Browsable(true)]
public List<string> Titles { get; set; } = new List<string>();
[Category("Action")]
[DisplayName("가로 그림자 영역")]
[Browsable(true)]
[DefaultValue(0)]
public int HorizontalShadowSize { get; set; }
[Category("Action")]
[DisplayName("세로 그림자 영역")]
[Browsable(true)]
[DefaultValue(0)]
public int VerticalShadowSize { get; set; }
[Category("Action")]
[DisplayName("가로 수")]
[Browsable(true)]
[DefaultValue(1)]
public int HorizontalCount { get; set; } = 1;
[Category("Action")]
[DisplayName("세로 수")]
[Browsable(true)]
[DefaultValue(1)]
public int VerticalCount { get; set; } = 1;
[Category("Action")]
[DisplayName("윈도우 API")]
[Browsable(true)]
[DefaultValue(typeof(NGM.API.Options.WindowMoveCommand), "SetWindowPos")]
public NGM.API.Options.WindowMoveCommand Command { get; set; } = NGM.API.Options.WindowMoveCommand.SetWindowPos;
[Category("Action")]
[DisplayName("창 추가")]
[Browsable(true)]
[DefaultValue(null)]
[Editor(typeof(NGM.Models.TypeEditor.FindControlEditor), typeof(System.Drawing.Design.UITypeEditor))]
public virtual string FindControl
{
get { return _findControl; }
set
{
if (Titles == null)
Titles = new List<string>();
_findControl = value;
if (string.IsNullOrEmpty(value))
{
if (MainView != null && MainView is NGM.Interface.IEditor)
(MainView as NGM.Interface.IEditor).RefreshProperty();
return;
}
List<string> nodes;
nodes = value.Split(new string[] { NGM.Definition.DOMSeparator }, StringSplitOptions.RemoveEmptyEntries).ToList();
Titles.Add(NGM.Common.GetMiddleString(nodes.FirstOrDefault(), "(", ")"));
if (MainView != null && MainView is NGM.Interface.IEditor)
(MainView as NGM.Interface.IEditor).RefreshProperty();
}
}
public override void Execute()
{
IntPtr handle = IntPtr.Zero;
int mw = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
int mh = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
int cw = mw / this.HorizontalCount;
int ch = mh / this.VerticalCount;
int x = HorizontalShadowSize > 0 ? -HorizontalShadowSize : 0;
int y = 0;
for (int i = 0; i < Titles.Count; i++)
{
var handles = NGM.Common.GetHandles(Titles[i], this.Children.Select(s => s.Node).ToList());
handle = handles.Item1;
if (handle != IntPtr.Zero)
NGM.API.Window.SetWindowPosition(
handle,
IntPtr.Zero,
x,
y,
cw + HorizontalShadowSize * 2,
ch + VerticalShadowSize * 2,
NGM.API.Options.SetWindowPosFlags.SWP_SHOWWINDOW,
this.Command);
if ((i + 1) % this.HorizontalCount == 0)
{
y += ch;
x = HorizontalShadowSize > 0 ? -HorizontalShadowSize : 0;
}
else
{
x += cw;
}
}
}
}
}
그림판은 클라이언트에 그림자 영역이 존재합니다. 그래서, 정렬하고나면 각각의 클라이언트가 간격을 가지게 됩니다. 보통 그림자 영역이 있는 윈도우 창들은 가로 8, 세로 4의 그림자 영역을 가집니다. 윈도우 10에서만 그렇고, 윈도우 11에서는 아직 확인해보진 못했습니다. 아마 동일하지 않을까요^^?
게임 다클라 다계정으로 돌리는 분들은 각자 창 배열, 창 정리 프로그램을 사용하고 있을겁니다. 어떤걸 쓰는지는 모르겠지만요. 간단한 산수만 할줄알면 창 배열은 누구나 쉽게 할 수 있지만, 문제는 코딩을 해야 한다는 겁니다. 이 부분이 진입장벽을 높이는 주 원인이죠. 그래서, 첨부 파일로 커스텀 모듈을 첨부 해두었습니다. 엔지엠 에디터의 관리자 메뉴에서 도구 모음 설치로 첨부된 dll을 선택해주면 자동 설치 됩니다.
[ 커스텀 모듈 다운로드 ]
[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]
원본 글 보기
http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech
#비활성매크로 #g102매크로 #철권매크로 #레이저마우스매크로 #ghub매크로 #녹화매크로 #키보드반복매크로 #로지텍마우스광클매크로 #플라스크매크로 #윈도우매크로 #비활성g매크로 #오토매크로 #자동사냥 #주식매크로 #오토핫키키보드 #오토핫키마우스 #오토핫키이미지 #지존오토 #기계식매크로 #하드웨어매크로 #무한반복매크로 #대량이메일발송매크로 #엑셀VBA매크로 #주식모니터링매크로
'이미지 매크로' 카테고리의 다른 글
모바일 게임 매크로 제작 - 매크로에서 마우스 드래그 하는 방법 (0) | 2022.07.24 |
---|---|
게임 매크로 제작 커뮤니티 - 캐릭터 주변으로 아이템 줍는 매크로 만들기. (아이템 루팅 방법) (0) | 2022.07.24 |
엑셀 VBA 매크로 제작 커뮤니티 - 과태료, 명함, 영수증 이미지에서 문자만 추출해서 엑셀에 정리하는 방법. (한글, 숫자, 영어 문자 판독 OCR) (0) | 2022.07.24 |
오토핫키 매크로 제작 커뮤니티 - 폴더에 스캔한 이미지를 넣으면 자동으로 인식해서 처리하는 매크로 만들기. (와치독 매크로, 이벤트 매크로) (0) | 2022.07.23 |
심플핫키 오토핫키 매크로 제작 커뮤니티 - 스캔한 책을 읽어주는 매크로 만들기 (0) | 2022.07.23 |