일반적인 화면캡처는 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장이나 불러오게 됩니다.
저부분을 루프 한번당 이미지 한장만 불러오게끔 하면 되죠.
구체적인걸 다 쓰긴 좀 그렇고 일단 저렇게 한다 라는 식으로만 이해하셨으면 좋겠습니다.
오늘은 여기까지만...쓰고싶은걸 정말 많은데...
저도 그걸 고려해서 최소한의 캡쳐로 동작되도록 해봤지만, 그다지 큰 차이는 못 느끼는데다
문제는 과도한 쓰기/삭제로 인해 하드에 무리가 가는 방식이다보니
후킹 쪽으로 눈을 돌리고 있습니다
(우선 opengl, directx 각각 다 후킹한뒤, 프레임버퍼를 따서 hbitmap으로 변환시키는 것 까지는 성공했지만,
인젝션된 dll에서 어떻게 C# 응용프로그램에게 이 hbitmap 포인터 값을 넘겨줄지가 문제라서
제작 진행이 지체된 상태네요...)