매크로 커뮤니티

조회 수 1896 추천 0 댓글 23

일반적인 화면캡처는 0.1초도 안걸립니다.

그러나 adb 로 이미지 가져오고 그걸 컴퓨터로 옮기는데는 길면 0.5초 가까이 걸립니다.

(이걸 빠르게 하는 방법은 있지만 여기까지 얘기하면 너무 전문적으로 가서 이 글에서는 다루지 않겠습니다)


매크로 만드는 방식이 아마 두가지일꺼에요.

adb 명령어를 쓰냐 마냐로 크게 나누면 되고 이에 따른 장단점은 명확합니다.

adb 를 쓰면 비활성 상태에서도 구현 가능, 단 속도 느림.

안쓰면 그의 반대 입니다.


보통 adb 느리다고 하는건 이미지 가져오는 시간 때문인데요.

사실 이건 큰 의미가 없습니다. 매크로 자체가 0.1초 이하를 다루는게 아니기 때문입니다.

근데 이걸 탓하는 사람들은 뭐가 문제일까요?


보통 루프 안에서 이미지를 불러오고 그에 따른 조건 처리를 할겁니다.

예를 들면


// 모험 3분 (세븐나이츠를 예로 들께요. 아래는 어디까지나 예시일 뿐입니다.)

for (int i = 0 ; i < 180 ; i++)

{

     2X 눌러졌나 확인;

     자동스킬 버튼 눌러졌나 확인;     

     현재 진행 라운드 확인 (1 ~ 3라운드 존재 할 수 있음);

     종료 여부 확인;

     Thread.Sleep(1000);

}


이렇게 돈다 치면 4번의 이미지를 확인해야되죠.

순진하게 저걸 함수로 불러 쓰고 함수 안에 adb 로 이미지 가져오는게 있으면 

이미지 한장이면 되는걸 4장이나 불러오게 됩니다.

저부분을 루프 한번당 이미지 한장만 불러오게끔 하면 되죠.


구체적인걸 다 쓰긴 좀 그렇고 일단 저렇게 한다 라는 식으로만 이해하셨으면 좋겠습니다.

오늘은 여기까지만...쓰고싶은걸 정말 많은데...


  • 암드래 2016.03.03 23:44

    저도 그걸 고려해서 최소한의 캡쳐로 동작되도록 해봤지만, 그다지 큰 차이는 못 느끼는데다

    문제는 과도한 쓰기/삭제로 인해 하드에 무리가 가는 방식이다보니

    후킹 쪽으로 눈을 돌리고 있습니다

    (우선 opengl, directx 각각 다 후킹한뒤, 프레임버퍼를 따서 hbitmap으로 변환시키는 것 까지는 성공했지만,

    인젝션된 dll에서 어떻게 C# 응용프로그램에게 이 hbitmap 포인터 값을 넘겨줄지가 문제라서

    제작 진행이 지체된 상태네요...)

  • 씨디공장 2016.03.03 23:56

    굳이 이 댓글에 태클을 걸자면
    매크로 돌릴 정도의 최소 컴퓨터 사양이면 쓰기 / 삭제에 큰 문제가 없고
    (이건 5년 전 컴퓨터에도 적용 안되는 아무 걱정할꺼 없는 문제입니다.)

    이에 대한 해결을 후킹으로 하실바엔 차라리 안드로이드에 전용 앱을 만들어서
    내가 원하는 데이터를 넘겨주는게 훨씬 쉬운 방법입니다. (이미지 전체중에 내가 원하는 값은 극히 일부겠죠)

    아니면 메모리 관련 api 를 호출하는게 더 나을지도...(이부분은 난이도가 상당히 높습니다)


    제 경험상 최소한의 캡처와 이미지 비교 알고리즘을 잘 쓰면
    구동에 아무 문제 없습니다. 실제로 만들어서 하고 있구요.

    이미지를 어케 비교해서 처리하는지 그게 궁금하군요.

  • 암드래 2016.03.04 00:02

    github에 있는 오토핫키 L 소스에 이미지서치 원본 소스가 있는데
    이를 토대로 dll을 제작하였고, 이를 사용하여 이미지를 비교할 생각입니다.
    하지만, 기본 이미지서치 소스는 화면 dc를 통째로 얻어서 서치하는 함수만 있어서
    블루스택을 위한 hwnd를 통한 해당 hwnd의 dc를 통해 이미지를 비교하는 함수와
    adb를 위한 이미지와 이미지끼리 비교하는 함수를 추가했네요

    이미지서치 소스를 보시면 bmp와 같은 그림 파일들을
    hbitmap으로 변환후 이를 이용해서 비교하는데
    그래서 후킹 dll 소스에도 프레임 버퍼를 hbitmap으로 변환하는 함수를 추가했지요


    이미지 비교 알고리즘은 오토핫키가 제일 무난한 것 같습니다.

    trans컬러 기능도 있고, 오차율 계산 구문도 소스 찾아보니 괜찮고요

  • 암드래 2016.03.04 00:04
    그리고 저 같은 경우엔 리듬게임을 자주하는데,
    유독 ADB를 이용한 매크로를 동작시킨 상태로
    리듬 게임을 돌렸다하면 끊김현상이 계속 보이고 하다보니
    ADB는 편하지만, 그만한 리스크가 좀 있고, 실시간 반응에 좀 쥐약이고 하다보니
    후킹쪽으로 눈을 돌렸습니다
  • 씨디공장 2016.03.04 00:30
    지금 쓸려는 후킹이 adb 를 통한건가요?
    아니면 그거 없이 화면에 안띄우고도 이미지 가져오는걸
    하신다는건가요?
    이게 아닌 화면에 띄워진걸 캡쳐하는건 너무 쉬우니 이걸 말씀하시는건 아닌거 같고...

    이미지 서치 소스는 adb 로 가져온 파일에서 읽는거랑
    dc 에서 읽는거랑 중간에 과정 하나만 넣으면 나머지는 공통입니다.
    c# 이라 치면 graphics 객체로 copytoscreen 으로 영역 가져온걸 bitmap 객체에 저장
    adb 로 가져온 파일에서 읽는건 비트맵 객체로 파일을 불러오면
    결국 연산은 bitmap 변수 하나가지고 하면 공통이네요.
  • 암드래 2016.03.04 00:35
    흔한 캡쳐 프로그램이 이용하는
    화면에 안띄우고 이미지를 가져오는 방식을 말하는 겁니다
    프레임 버퍼를 통해 얻은 hbitmap의 포인터를 매크로 프로그램에게 넘겨주고
    매크로 프로그램에서 hbitmap을 통해 이미지 서치를 하도록 제작할려고 하네요

    어차피, opengl이나 directx나 둘 다 그래픽 카드를 통해 그리는 방식이니 dc는 절대 안통하니,
    후킹해서 프레임 버퍼를 직접 따오는 방식이라면 최소화 상태에서도 잘 작동하겠지요
    퍼포먼스는 좋으면서, 완벽한 비활성도 가능하다보니 후킹 쪽을 파보고있습니다
  • 씨디공장 2016.03.04 00:48
    비활성 창을 캡처하는 캡처프로그램이 흔한가요?
    프로그램 이름 먼저 가르쳐주시겠어요???
    전 흔하게 못본거 같은데...
  • 암드래 2016.03.04 00:50

    반디캠이랑 프랩스, 오픈 소스인 taksi 라는 캡쳐 프로그램이 있겠네요

    셋의 공통점은 dll 인젝션을 통한 후킹을 이용해 캡쳐를 한다는 점 입니다

  • 씨디공장 2016.03.04 00:58
    전 주로 제가 필요로 하는건 만드는 스타일이라
    남들꺼에 대한 관심을 덜가졌던거 같습니다

    비활성 캡쳐 만들어보고 공개 하든가 할게요.
  • 슉슉이 2016.03.04 00:28
    리듬게임, 연타콤보가 있는 게임, 회피가드, 몹인식, 적인식 같은 걸 하려면 adb로는 조금 힘들죠. 하지만 이것도 예날 예기임ㅎ 이런저런 꼼수 다 활용하면 adb로도 서치+클릭까지 0.3초까지 됩니다ㅎ adb느리다는 건 이제 옛날 말이죠ㅎ
  • 씨디공장 2016.03.04 00:31

    지금 그 0.3초가 느리다는 얘기를 하는겁니다.
    graphics 객체로 copytoscreen 화면 가져오는 방식을 쓰면 0.01초 걸릴래나...
    둘의 차이는 몇배죠?


    물론 이 글은 0.3초가 큰 의미 없다는 얘기를 하는거지만

    느린다는건 사실입니다.

  • 슉슉이 2016.03.04 00:47
    이미지캡쳐푸쉬0.4~0.5, 클릭 0.4~0.5초, 연타시 클릭간 텀 0.9~1.0초가 캡쳐푸쉬클릭, 캡쳐푸쉬클릭 사이의 시긴이 0.3초 정도라는 거임. 거의 딜을 못느낌. 초당 3번 서치 3번클릭, 이미지 푸쉬만하면 1처에 5번 정도. 클릭만하면 10번 정도 가능함. 저도 adb가 느려서 다른 거 찾다 이정도로 줄여져서 그냥 쓰기로 함.
  • 슉슉이 2016.03.04 00:49
    다음 매크로 만들 땐 다 적용해서 만들 거임ㅎ
  • 슉슉이 2016.03.04 00:54
    아 그리고 블택 이외엔 핸들로 이미지 못가져옵니다ㅎ 여려가지 꼼수가 또 ㅅ긴하지만 제일 깔음한 방법은 윗분말씀따나 후킹하는 걸로 알고있음ㅎ
  • 슉슉이 2016.03.04 00:57
    게다가 요즘은 최소화나 백그라운드로 숨기는 게 거의 필수옵처럼 되서 앱플레이어가 ㅎ하면에서 사라져야 합니다. 뭐 혼자 쓰면야 강상모니타를 쓰든 다른창뒤에 있든 투명으로 만들면 되지만 팔아서 용돈이라도 벌려면 고객?이 원하는 옵션을 구현해야죠ㅎ
  • 씨디공장 2016.03.04 01:50

    일단 간단히 해봤는데

    비활성 화면 캡쳐 하는건 아주 쉽네요. (화면이 가려져도 캡쳐가능)

    근데 최소화된걸 캡쳐하는건 조금 트릭이 필요한거 같습니다.


    이것도 한번 해볼께요.

  • 암드래 2016.03.04 02:39

    녹스에서도 화면가린채로 제대로 가져와졌나요?

    만약, DC를 통해 가져오신 거라면 블루스택에서는 잘되겠지만,

    OpenGL을 이용한 지니모션이나, 녹스, 미뮤 등과 같은 앱 플레이어는 빈화면만

    불러와질 겁니다
    그리고, 최소화 상태에서 캡쳐는 스택오버플로우나 다른 외국 커뮤니티
    전부 후킹을 이용하시면 됩니다 라고 하네요

  • 슉슉이 2016.03.04 10:36
    //컴퓨터를 잘 몰라서 그냥 말하는 거 미리 양해구합니다. //다 완벽하게 할 필요없이 후킹으로 가져온 거 파일로 저장해서 그걸 해당 매크로제작 언어에서 가져와도 충분한 속도가 나올 것 같습니다. //키입력이 문제인데 요즘 블텍2나 미뮤 같은 애뮬들은 창을 띄어놔도 adb말곤 터치를 입력을 할 방법이 없는 것 같던데(포스트 메세지가 안되더군요. 그냥 컨트롤클릭과 키맵을 이용해서 하는 방법 뿐) 이건 어떻게 해결하면 좋을까요? 분명 vm에 직접 클릭 넣는 방법이 있을텐데 뭘 공부해야할까요?
  • 슉슉이 2016.03.04 10:42
    실력이 부조해서 이런저런 문제 해결못하거 다시 adb로 돌아왔습니다. 각 애뮬들이 버전업을 하면서 Adb도 에전과 다르게 많이 안정적으로 작덩이 되는 이유도 있고요. 그래서 그런지 요좀 유료매클도 블텍 안쓰고 미뮤 같은 걸로 adb 매크로를 만드는 것 같더군요.
  • 씨디공장 2016.03.04 15:31

    녹스는 안깔려있어서 안해봤는데요.
    제가 해본건 direct3d 랑 win32api 쓴거랑 두가지 였습니다.
    찾다보니 slimdx 라는 라이브러리 깔아서 하는것도 있더군요.

    후킹은 directx 쪽이던데 소스까지는 구했지만 어젠 피곤해서 더는 안찾아봤어요.
    이부분 이제 좀 해봐야겠습니다.

  • Hangoon 2016.03.04 15:43

    솔직히 전 adb가 느리다고 생각안해요

    물론 느립니다

    근데 매크로제작에 있어서는 차고넘치는 수준입니다....... 

    저는 캡쳐함수와 이미지써치함수, 클릭함수를 따로 운용하고 있습니다.

    adb를 이용해 매크로를 만들려면 무조건 이렇게 해야합니다. 이렇게 안하면 수많은 분기를 처리하는 시점에서는 너무 느려지거나 코딩이 너무 길어지거나 둘중에 하나가 될겁니다.

    (본문 작성자님과 거의 같은 논지의 의견입니다)


    제한적으로, 동작이 빨라야하는 퍼즐류 게임이나 액션이 주가 되는게임의 경우.....

    매크로로 하려고 하는 사람도 별로 없겠지마는....

    혹여나 호기심차원에서 만들려고한다면 굳이 비활성으로 안만들거 같습니다


    이와는 별개로, 당연하게도,

    더 빠르게 adb처럼 에뮬창을 가리거나 에뮬창크기를 임의로 바꾸거나 최소화여부에 관계없이 깨끗한 이미지를 가져오는 기술에 대한 관심은 매우 많이 가지고 있지요 ㅎㅎㅎ 저야........... 지식이 부족하고 실력이 안되어 그냥 머물러 있을 뿐이죠..ㅎㅎㅎ 


  • 씨디공장 2016.03.04 16:03
    제 글의 논지는 adb 효율성 개선에 대한 내용인데
    첫댓글부터 산으로 가서 댓글 전체가 이상한쪽으로 흘러간...

    사실...판매용이든 개인용이든 adb 쓴거랑 안쓴거랑 둘다 지원하면 그냥 해결됩니다.
    그러면 어떠한 환경에서도 자기 입맛에 맛게 쓸수 있겠죠.

    그리고 마지막에 말씀하신 그부분은...adb 가 가능했던 이유가 안드로이드라는 특성 때문입니다.
    adb 는 안드로이드에서 쓰는거구요. 굳이 이걸 일반 다른 환경에서 쓴다고 치면...
    가상머신 정도가 되겠네요. hyper-v 같은거 말이죠.
    여기서도 화면 축소 확대한걸 원본이미지로 가져올 수 있습니다. adb 처럼 말이죠.
    이외에도 몇가지 더 있긴 합니다만 공부하시는거라면 hyper-v wmi c# 이부분을 msdn 에서 찾아보세요.
  • 프리헌터스 2016.03.04 16:10

    한군님 말씀처럼.. 스피드한 게임 컨트롤을 제외하면

    현재 adb방식으로도 충분히 빠릿하게 작동가능합니다.


    하지만 안드로이드 매크로의 종착역은 후킹일것 같습니다.

    관련 기술이 동영상녹화 등에 국한되어 있지만 

    서서히 매크로 툴쪽에 들어가지 않을까 싶네요.


    전 관련지식이 부족하여 소스 삽질하다 잠시쉬면서 adb 반응속도 끌어올리고 있습니다.

    인간의 평균클릭 반응시간이 0.25초대, 기기에 따라 다르지만 이 시간대에 작동됩니다.


List of Articles
분류 제목 글쓴이 최근변경 추천
자유 운영 방해 목적의 매크로 관련 글 제재 피카부 2019.09.03 0/0
질문 매크로가 안 됩니다... 7 야월 2016.05.30 2/0
질문 현재 지금 사용할수 있는 매크로는 존재 하지 않나요? 2 아루민 2016.03.19 0/0
정보 adb 이미지 가져오는게 느려도 큰 상관 없습니다. 23 씨디공장 2016.03.07 0/0
자유 C# 관심있어서 들어왔는데 팁 공유하고 싶어요. 11 씨디공장 2016.03.19 0/0
질문 네뷸랑 공지사항 멈춤 현상.. 8 무위진인 2016.03.19 0/0
자유 네뷸라 영웅 꽉차면 멈추네요 6 옙솔루트 2016.03.19 0/0
질문 어제부터 갑자기 매크로가 안 돌아갑니다. 야월 2016.03.01 0/0
질문 네뷸라 질문이요 1 rimite 2016.03.01 0/0
질문 구글 드라이브 어떻게 쓰는 건가요? 2 뽀롱뽀롱 2016.03.01 0/0
자유 루나전기 매크로 있나요 신크테리 2016.02.28 0/0
질문 히트 콘트롤러 도시락강화가 이상해요 2 휴카페 2016.03.08 0/0
질문 C# 질문 드립니다. 2 지니모션하쟝 2016.03.02 0/0
질문 레이븐 지쳐가네요 하..ㅠ 3 꽁스 2016.03.19 0/0
자유 로킹도 곧있으면 누군가 만들어주시겠죠? ㅠㅠ 11 물비누 2016.07.14 2/0
질문 로스트킹덤 사용가능한 매크로없나요? 프렙 히로다안대... 2 카이나 2016.03.01 0/0
질문 네뷸라 레이드 입장 문제 5 나나맨 2016.02.27 0/0
자유 혹시 피파3 강장매크로있으신분계신가요? 4 피파골수팬 2016.03.19 0/0
자유 히트패드를 받고싶은데 다룬로드 1 켄자드 2016.03.04 0/0
자유 세븐나이츠 매크로 질문좀할게요 7 갱뮈 2016.03.25 0/0
자유 간단한 매크로 대신만들어주실분 ㅠ 홍사덕 2016.02.27 0/0
Board Pagination Prev 1 ... 384385386387388389390391392 ... 525 Next
/ 525

전체 최신 인기글

전체 주간 인기글