윈도우 창 정리 프로그램, 다클라, 다계정 매크로, 오토핫키, 무료 매크로, 엑셀, 게임 매크로
매크로 커뮤니티, 메크로 제작 의뢰, 엔지엠 무료 매크로 다운로드 http://ngmsoftware.com
엔지엠소프트웨어
엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.
www.ngmsoftware.com
안녕하세요. 엔지엠소프트웨어입니다. 얼마전에 다클라 다계정하시는 고객분이 창을 어떻게 정렬할지 문의한적이 있습니다. 보통은 창을 하나씩 선택해서 직접 창 크기와 위치를 설정하면 되긴하는데요. 좀 더 편리하게 작업할 수 있도록 커스텀 모듈을 만들어봤습니다. 대부분은 아마도 [ 윈도우 이동 ], [ 윈도우 크기 ] 액션을 사용하고 있을겁니다. 자~ 커스텀 모듈을 만들기 위해 비주얼 스튜디오를 실행하고, 새로운 프로젝트를 하나 추가 해줍니다.
커스텀 모듈을 만들기 위한 셋팅 및 학습은 아래 게시판을 먼저 학습하고 이 글을 읽어야 합니다.
[ 커스텀 모듈 개발 환경 만들기 ]
어떻게 동작하는지는 아래 동영상을 참고하세요. 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을 선택해주면 자동 설치 됩니다.
파이썬 매크로 개발, C# 매크로 개발, 주식, 코인, 선물 단타, 자동매매, 오토핫키
매크로 커뮤니티, 매크로 제작, 엔지엠 RPA 매크로 무료 사용 http://ngmsoftware.com
엔지엠소프트웨어
엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.
www.ngmsoftware.com
'엔지엠 매크로' 카테고리의 다른 글
매크로 프로그램 - 랜덤 클릭 오토마우스 (0) | 2022.06.26 |
---|---|
매크로 프로그램 랜덤 지연과 가우시안 랜덤 지연의 차이점. (0) | 2022.06.26 |
유치원 회계 K에듀파인 자동화 RPA 매크로의 최강자 파인캐어 지니 솔루션. (Finecare Genie, K Edufine) (0) | 2021.12.11 |
자유형 이미지를 활성 또는 비활성 매크로에서 사용하는 방법. (0) | 2021.11.13 |
비활성 다클라 매크로를 만드는 노하우 공개! (0) | 2021.11.13 |
댓글