본문 바로가기
이미지 매크로

C# .NET 매크로 프로그램 만들기. (모바일 안드로이드 휴대폰 매크로 만들기 3부)

by 업무자동화 2024. 5. 23.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #엔지엠에디터 #엔지엠플레이어 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화

 

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 모바일 기기에서 터치 및 스와이프, 드래그 앤 드롭 기능 개발에 이어서 안드로이드 휴대폰에 키보드 동작 및 텍스트 입력을 알아볼께요. 키보드 관련된 액션은 이전 시간에 이미 만들었기 때문에 코딩만 추가하면 될듯 합니다. 물론, ADB와 SCRCPY로 안드로이드폰이 윈도우에 연결되어 있어야 해요. 저는 아래와 같이 해상도를 3분의 1로 줄여서 실행시켜 놓았습니다.

 

 

스크립트는 아래와 같이 구성되어 있습니다. 일단 코딩부터 하고, 동작 테스트를 해볼께요.

 

 

변수를 통해서 엘리먼트를 대상으로 명령을 실행할 수 있는데요. 이 부분은 마우스도 그렇고 키보드도 아직 테스트가 완료되지 않았습니다. 그렇더라도, 나중에 기능을 구현하고 테스트는 진행할거라서 미리 속성들을 만들어 두었습니다. 이 내용은 추가하지 않아도 사용에 문제는 없습니다.

[LocalizedCategory("Data")]
[LocalizedDisplayName("AdbElementResult")]
[LocalizedDescription("AdbElementResult")]
[Browsable(true)]
[DefaultValue(null)]
public Element? ElementResult { get { return _element; } set { _element = value; } }

[LocalizedCategory("Data")]
[LocalizedDisplayName("TargetElement")]
[LocalizedDescription("TargetElement")]
[Browsable(true)]
[DefaultValue(null)]
public Element? TargetElement { get { return _targetElement; } set { _targetElement = value; } }

 

안드로이드 모바일 기기의 현재 화면에서 엘리먼트를 찾기위한 속성들입니다.

[LocalizedCategory("Element")]
[LocalizedDisplayName("FindElementByXpath")]
[LocalizedDescription("FindElementByXpath")]
[Browsable(true)]
[DefaultValue(null)]
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string? FindElementByXpath { get; set; }

[LocalizedCategory("Element")]
[LocalizedDisplayName("ElementIndex")]
[LocalizedDescription("ElementIndex")]
[Browsable(true)]
[DefaultValue(0)]
public int ElementIndex { get; set; }

 

키보드 액션에서 제공하는 기능 목록입니다. 아래에서 이 목록을 하나씩 구현해야 합니다.

[LocalizedCategory("Action")]
[LocalizedDisplayName("MobileInputType")]
[LocalizedDescription("MobileInputType")]
[Browsable(true)]
[DefaultValue(typeof(Ai.Definition.MobileKeyInputType), "Write")]
public Ai.Definition.MobileKeyInputType MobileInputType { get; set; } = Definition.MobileKeyInputType.Write;

 

각각의 기능은 텍스트 쓰기, 키보드의 키 누르기, 입력창에서 텍스트 모두 지우기, 전체 선택, 복사, 전체 선택 후 복사, 붙여넣기, 전체 선택 후 붙여넣기입니다. 복사와 붙여넣기는 전체 선택에 따라서 동작이 달라집니다. 복사할 대상이 없는 상태에서 복사 명령은 아무런 동작도 수행하지 않습니다. 이런 경우 마우스로 복사할 영역을 지정한 후 복사해도 되지만, 일반적으로 전체 선택 후 복사하기 때문에 명령이 세분화 되어 있습니다.

public enum MobileKeyInputType
{
    Write = 0,
    Key = 1,
    Clear = 2,
    SelectAll = 3,
    Copy = 4,
    SelectAllCopy = 5,
    Paste = 6,
    SelectAllPaste = 7
}

 

안드로이드폰의 입력창에 쓸 텍스트입니다. 그리고, 클리어 텍스트 길이는 위의 기능에서 클리어 옵션에서만 사용되는 값입니다. 한번에 지울 수 있는 글자 수를 입력해야 합니다.

[LocalizedCategory("Action")]
[LocalizedDisplayName("Text")]
[LocalizedDescription("Text")]
[Browsable(true)]
[DefaultValue(null)]
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string? Text { get; set; }

[LocalizedCategory("Action")]
[LocalizedDisplayName("ClearTextLength")]
[LocalizedDescription("ClearTextLength")]
[Browsable(true)]
[DefaultValue(25)]
public int ClearTextLength { get; set; } = 25;

 

Adb 키코드표를 enum으로 정리했습니다.

[LocalizedCategory("Action")]
[LocalizedDisplayName("VirtualKeyCode")]
[LocalizedDescription("VirtualKeyCode")]
[Browsable(true)]
[DefaultValue(null)]
public Ai.Api.NativeInputManager.Native.Adb.KeyCode[]? Keys { get; set; }

 

키코드표는 아래 구글 ADB 개발자 커뮤니티에서 확인할 수 있습니다.

[ 안드로이드 모바일 앱 개발자 도구 ]

 

이제 완성된 코드를 실행하면서 하나씩 테스트 해볼까요?

https://youtu.be/_iSO1qkXMds

 

 

 

텍스트 쓰기는 SendText 메소드로 처리할 수 있습니다.

if (TargetElement == null)
{
    if (string.IsNullOrEmpty(FindElementByXpath))
        player.Manager.AdbInfo.ADB.SendText(device, AdbSpecialCharReplace(Text));
    else
    {
        if (deviceClient == null)
            deviceClient = new DeviceClient(player.Manager.AdbInfo.ADB, device);

        var element = deviceClient.FindElements(FindElementByXpath).ToList();
        element[ElementIndex].SendText(AdbSpecialCharReplace(Text));
    }
}
else
    TargetElement.SendText(AdbSpecialCharReplace(Text));

 

이와 관련해서 래퍼는 SendText지만, adb shell은 input keyevent "TEXT" 입니다. 이와같이 구글 개발자 커뮤니티의 adb 명령으로 하나씩 만들어야 합니다. 실제 내부 구현은 아래와 같습니다. 텍스트는 text 명령을 사용하고, 키보드 입력은 keyevent를 씁니다. 앞으로 기능을 좀 더 다음어야겠지만, 멀티키의 경우 keycombination을 사용합니다. 이 부분은 시프트키, 콘트롤키, 알트키와 같이 독립적으로 사용될 수 없는 키와 조합해서 사용해야 합니다.

ConsoleOutputReceiver consoleOutputReceiver = new ConsoleOutputReceiver
{
    ParsesErrors = false
};
AdbClient.ExecuteShellCommand(Device, "input text " + text, consoleOutputReceiver);
string text2 = consoleOutputReceiver.ToString().Trim();
if (text2.StartsWith("java.lang."))
{
    throw JavaException.Parse(text2);
}

if (text2.Contains("ERROR", StringComparison.OrdinalIgnoreCase))
{
    throw new InvalidTextException();
}

 

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글