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

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

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

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

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원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 안드로이드폰에 텍스트를 입력하는 내용에 대해서 알아볼텐데요. 이 글을 마지막으로 안드로이드 모바일 매크로 제작은 거의 마무리가 됩니다. 아직, 윈도우 API쪽의 마우스와 키보드 제어도 개발해야 합니다. 생각해보면 이미 만들어진 ADB API에 연결만 하면 될듯한데요. 핸들을 추가해서 이미지 좌표와 매핑해야 하는 부분은 추가적인 테스트가 더 필요할듯 합니다.

 

우선, ADB의 키보드 모델에 아래와 같은 속성을 추가 했습니다. 대부분의 기능이 어제 만들었던 3부 내용과 동일합니다. 다만, 자동으로 텍스트 내용을 분석해서 한글과 영어를 분리해내고 각각의 언어에 맞는 정보를 ADB 기기로 넘기도록 해야 합니다. 

[LocalizedCategory("Action")]
[LocalizedDisplayName("StandardIMEForEnglish")]
[LocalizedDescription("StandardIMEForEnglish")]
[Browsable(true)]
[DefaultValue(true)]
public bool StandardIMEForEnglish { get; set; } = true;

 

안드로이드 디바이스가 IME 모드 정보를 알려주면 좋겠지만, 몇일동안 구글링을 해보고 관련 자료들을 찾아봐도 현재 IME를 알 수 있는 방법이 없더라고요. 하지만, 키보드 정보로 어느정도 유추할 수 있긴한데요. 사용자가 꼭 구글 키보드만 사용한다는 보장도 없었습니다. 삼성폰의 경우 삼성 키보드가 별도로 설치되어 있어서 정보가 분명하지 않더라고요.

 

가장 큰 문제는 ADB 기기의 IME 정보를 리셋할 수 있긴하지만, 삼성폰의 경우에는 앱 내부에 IME 정보가 기록되기 때문에 어떤 키보드를 사용하느냐에 따라서 정보가 계속 변화합니다. 특정 정보를 정해서 가져올 수 있으면 좋겠지만, 현재로는 제공되는 API가 없어서 어쩔 수 없이 초기 시작 IME를 사용자가 선택하도록 해야했습니다. 만약, 이미지 서치 또는 이미지 매치를 같이 이용하면 쿼티 키보드를 인식해서 자동화 할 수 있긴 합니다.

 

 

아래와 같이 사용자가 입력하길 원하는 텍스트에 한글과 영어가 혼합되어 있는지를 먼저 체크합니다.

if (Regex.IsMatch(Text, "[가-힣a-zA-Z]"))

 

안드로이드 휴대폰에 텍스트를 입력할 때 몇몇 특수 문자들은 정상적으로 입력하지 못하고, 에러를 발생시킵니다. 대표적으로 스페이스인데요. 안드로이드에서 스페이스는 %s입니다. 그래서, AdbSpecialCharReplace 메소드가 " " 문자를 "%s"로 변환해줍니다. 그리고, 시작 IME 모드가 영어인지 초기화 해줍니다.

string inputText = AdbSpecialCharReplace(Text);
bool isHangul = !StandardIMEForEnglish;

 

입력 텍스트를 한글자씩 분리해서 inputValue 변수에 담아줍니다. 자료형이 캐릭터라서 특수문자 처리한 것들이 2개의 캐릭터로 분리되는 문제가 발생할 수 있습니다. 그래서, 이스케이프 문자를 표시하는 \\ 캐릭터는 스킵하도록 했습니다. 이후에 다시 문자를 한번 더 변환해줘야 합니다. 이 코드는 효율 문제로 약간 손봐야 할거 같긴 합니다.

foreach (char inputValue in inputText)
{
    if (inputValue == '\\')
        continue;     

 

문자가 한글이라면 자소를 분리해서 한글 키보드로 입력할 수 있도록 해줍니다.

if (Ai.Api.NativeInputManager.Native.JaSoGenerator.IsHangul(inputValue.ToString()))
{

 

영어는 한자한자 문자로 처리가 가능하지만, 한글은 자음과 모음이 합쳐진 3bytes 데이터를 가집니다. 따라서, 2bytes의 문자들과 처리가 다른데요. 이 기능의 핵심은 한글의 자소를 분리해서 키보드에서 하나씩 입력될 수 있도록 해주는겁니다.

var keyCodeList = Ai.Api.NativeInputManager.Native.JaSoGenerator.SplitJaso(inputValue, true);

 

아래와 같이 분리된 자소를 키보드 신호로 전달해줍니다.

foreach (var keyCode in keyCodeList)
    player.Manager.AdbInfo.ADB.SendText(device, keyCode);

 

만약, 한글이 아니라면 아래와 같이 글자 하나하나 바로 입력할 수 있도록 해주면 되겠죠? 이 부분은 이전 코드와 동일합니다.

player.Manager.AdbInfo.ADB.SendText(device, AdbSpecialCharReplace(inputValue.ToString()));

 

이 비즈니스 로직은 하드웨어 매크로 제작하기에서 알아본 내용과 동일합니다. 다만, 기기의 특성상 다른 부분들이 있어서 약간 수정해서 재사용한 코드입니다. ADB가 아닌 경우 대부분 윈도우에서 실행되는 프로그램이고, 윈도우 API를 이용해서 해당 프로그램의 IME를 알아낼 수 있습니다. 그래서, 인공지능 매크로답게 자동으로 입력 처리가 가능한데요. ADB는 윈도우에서 실행되는 기기가 아닌 미러링 방식이라서 IME 정보를 가져올 수 없는 한계가 있습니다. 아쉬운 부분이네요^^;

 

완성된 기능을 아래와 같이 테스트 해봤습니다. 한글과 영어가 혼합되어 있어도 잘 입력되는걸 확인할 수 있습니다. 사실, 윈도우에서 처리할 때는 한영 문제를 피하기 위해서 가장 간단한 방법으로 Ctrl+C, Ctrl+V 복사 붙여넣기를 사용합니다. 이 방법이 가장 간편하죠. 하지만, 모바일 기기에서는 이렇게 처리할 수 없기 때문에 로직을 전부 만들어줘야 합니다.

https://youtu.be/WMiudFFynKU

 

 

 

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

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

 

원본 글 보기

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

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글