디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] 교훈 : 어중간한 실력으로 크롬 전용 게임 비활성 매크로 제작하지 말자.

ㅇㅇ(110.11) 2020.07.01 19:29:15
조회 1488 추천 1 댓글 22
														

비활성 매크로 제작을 시도하면서 실패 후기를 남겨 봄..



일단 비활성 매크로의 주 목적은, 주로 남들 몰래 게임을 진행하기 위함과 본인이 컴퓨터로 하는 것을 방해받지 않기 위함임.

이런 매크로를 좀 더 잘 만들기 위해서는 몇 가지 선수 지식이 요구되는 것 같음.


일단은 윈도우(창)라는 게 다 핸들로 구분되어 있고, 사용자는 그 윈도우들에 일련의 메시지(키 입력, 마우스 클릭 등)를 보내서 상호 작용을 하는데, 각각의 윈도우마다 전체적인 틀 내에서 메시지 처리 방식이 별도로 있음. 보통은 크게 다르지 않음. 그리고 각각의 윈도우 중에는 활성 창 1개랑 비활성 창들로 이루어져 있고, 보통은 활성 창만 메시지를 받음. 근데, 핸들을 특정해 주고 메시지를 발생시킬 수가 있음. 


좀 더 구체적으로는

메시지를 보내길 원하는 윈도우의 handle을 얻고 (FindWindow 같은 거 쓰면 됨.)


PostMessage(handle, 메시지, 옵션1 옵션2)를 하면 윈도우에 그 메시지를 다이렉트로 보낼 수 있음.

 


그렇게 해서 실제로 우리가 하는 활성화 키 입력이랑 마우스 입력은 그렇게 창이 비활성화되어 있어도 문제 없이 메시지를 보낼 수 있음. 

근데, 이제부터가 정말 골치 아파짐. 


1. 스크린 캡쳐.


이걸 원하는 크롬창만(작업표시줄 같은 거 안 보이게) 스크린 캡쳐를 하고, 파일로 저장하는데 계속 검은 화면이 뜸. 근데, 동일한 코드를 크롬 창 말고 다른 윈도우 창으로 시도해 보면, 어떤 창은 검은 화면 뜨고, 어떤 창은 제대로 뜨고, 심지어 어떤 창은 배경은 검은색인데 구성 요소들은 또 제대로 뜸. (맨 처음 시작할 때 배경 화면을 캡쳐해 보면, 원래 푸른색인 바탕화면은 검은색으로 표현되고 아이콘들은 정상적으로 표현됨.)


이 문제에 대해 StackOverflow 등을 찾아다니면서 알아본 결과, 해당 윈도우가 이미지를 그리는 방식이 근본적으로 다르기 때문이라고 함. 


화면 캡쳐하는 기본적인 방법은 윈도우에다가 Print 메시지 같은 걸 보내면 그 윈도우가 알아서 해 주겠지 라는 생각으로 보통 이루어짐. 


그런데, 이 방식은 CPU를 사용하는 것이고, 크롬의 이미지는 CPU가 아니라 GPU를 사용함. 다른 말로는, 하드웨어 가속을 사용한다고 함. (왜냐하면, 이미지 표현하는 건 CPU보다 GPU가 더 빠르고 잘 한다고 함.)


이때, 하드웨어 가속을 하여 GPU를 사용해서 그린 이미지는 CPU를 사용해서 그림을 그리는 GDI 방식으로는 캡쳐가 안 됨. (적어도 난 방법을 못 찾았음.)


그래서 나도 똑같이 GPU를 사용해서 화면 캡쳐하면 되는 거 아니냐고 생각하고 좀 더 자료 찾아 봤는데, 결국 못 찾음. (후보 몇 개 찾았지만 다 실패함.)


그나마 이건 해결 방법이 있었음. 


그냥 크롬 보고 GPU 쓰지 말라고 하는 거임. (설정 창에 있음.) 그리고 실제로 GPU를 쓰지 않도록 설정하고 크롬 창을 캡쳐해 봤더니 제대로 캡쳐가 됐음!


근데, GPU를 안 쓰니까 렉이 심하게 걸리더라.  


그래, 뭐 이 정도 렉은 그냥 눈 감아 줄 수 있지. 


정 안 되면 또 다른 해결 방법이 있었음. 


크롬 창을 캡쳐하지 말고, 모니터 화면 자체를 캡쳐하는 방법임. 크롬 창은 Print 메시지를 처리할 때, GPU 기반 이미지를 출력해 주지 않지만, 모니터 자체에 Print 메시지를 보내면 모니터는 그냥 각 픽셀의 RGB값을 반환해 줘서 전체 화면 스크린샷은 언제나 가능함. 


그래서 본래 목적에서 방해 받지 않는다는 걸 포기하고, 남들에게 보이게 하지 않는다는 목적을 달성하는 준비활성 매크로를 만들어보고자 했음. 

게다가 윈도우10에서는 새 데스크톱을 만들 수 있더라. 그러면, 본래 작업할 데스크톱1과 알아서 돌아가게 할 창이 있는 데스크톱2를 생성하고, 

데스크톱1에 있다가 일정한 시간 간격으로 데스크톱2로 순간적으로 이동해서 전체 화면 스크린샷을 하고 다시 데스크톱1로 돌아오는 거임. 이때, 그 순간에 누가 볼 수 있으니까, 데스크톱2로 이동하기 전에 화면을 끄고(절전 모드로 만듦. Fn +F9 로 하면 더 좋은데, Fn키를 보내는 메시지가 없더라. 이거 찾느라 또 고생함.), 스크린샷 하고 데스크톱1로 완전히 돌아오면 다시 화면을 켜는 거임. 


그러면, 일정 간격으로 화면이 꺼졌다 켜졌다 하겠지만, 공공장소에서 사용하다가 들킬 위험은 줄어듦.


이 기능들까지는 어찌어찌 잘 구현했음.

근데, 진짜 근본적인 문제는 그 다음이었음.



2. 클릭하면 창이 활성화된다.


윈도우 창을 클릭하면 그 윈도우 창이 맨 위로 올라오고 다른 윈도우 창들은 (그 창이랑 겹쳐 있으면 겹친 부분이) 가려지는 건 다들 알 거임. 그게 대충 활성화된 창의 특징 중 하나임. (포커스가 해당 윈도우 창으로 이동했다고도 함.)


근데, PostMessage를 해서 비활성 클릭을 해도 그 창이 활성화가 됨. 그러면, 모니터 화면이 자동으로 그 윈도우 창을 표시하게 됨. (데스크톱 다르면 그 창이 있는 데스크톱으로 이동까지 해 주더라.)


이게 해당 윈도우를 마우스 클릭을 하면 WM_MOUSEACTIVATE라는 메시지가 자동으로 발생하고 이걸 윈도우 창에서 처리할 때는 일반적으로는 창을 활성화시키도록 처리함. 다만, 처리 방식에 따라서는 이 메시지를 다르게 처리해서, 마우스 클릭은 처리하고 활성은 시키지 않게 하는 처리 방식도 있다고 함. 그런 처리 방식을 갖는 대표적인 예가 터치 키보드임. (터치 키보드를 클릭해도 포커스가 터치 키보드에 가지 않음.)


그리고 그걸 위해 좀 알아 본 게, 윈도우 창의 확장 스타일 중에 WS_EX_NOACTIVATE라는 스타일이 있음. 이게 바로 클릭해도 활성화가 되지 않게 해 주는 윈도우 스타일임. 


그래서 해당 윈도우의 핸들을 구해서 그 핸들의 확장 스타일에 WS_EX_NOACTIVATE를 추가해 주면, 그 윈도우를 클릭해도 활성화가 되지 않음. 


근데, 크롬은 예외더라. 더 정확히는 크롬의 클라이언트 창은 예외더라.  일반적인 다른 윈도우 창들은 저렇게 코드 만들어서 저런 확장 스타일 추가해 주면 정말로 클릭을 해도 창이 맨 위로 뜨지 않고 다른 창에 가려진 채로 남아 있음. 즉, 코드 문제가 아님. 심지어 크롬의 Non-client 영역(위에 검색창이랑 탭 있는 부분. 얘는 또 다른 핸들을 갖고 있음.)에다가 시도해보면 얘도 클릭해도 활성화가 되지 않는 상태가 됨. 즉, 이건 단순히 코드의 문제가 아니라 크롬의 보다 근본적인 구조가 이 방식을 못 하게 하는 것 같음. 그리고 관련 정보도 좀 찾으려고 해 봤지만 못 찾았음. 



이 문제 만큼은 정말 해결해 주기 쉽지 않았음. 


이 게임은 키보드를 쓸 일이 거의 없고, (유니온 기부랑 채팅 정도?) 마우스 클릭으로 진행하는 게임인데, 마우스 클릭 메시지를 보내는 것만으로 그 창이 모니터 화면에 바로 보이게 되면, 결국 누군가에게도 보일 위험이 매우 큼. 


그러면 차라리 본인의 매크로를 믿고, 윈도우 화면을 투명하게 만들면 어떨까 싶었는데, 크롬 창을 투명하게 만드는 방법을 찾지 못했음. 


어쩌면 게임이 크롬이 아니라 오페라로 돌아가기만 했어도 아마 비활성 매크로 만들 수 있었을 것 같은데, (오페라에 직접 해 본 건 아니고 된다는 글을 본 것 같음. 근데 어차피 오페라로 게임 안 돌아가니까 시도도 안 함.)


아니면, 특수 안경이 있어야만 보이는 모니터 화면이라면 또 모를까.....



이렇게 엄청난 고통을 받고 문제 해결을 완전히 하지 못한 채 포기함.....



혹시라도 이 과정을 통해서 겪은 문제를 하나라도 해결할 방법이 있으면 알려주면 정말 감사하겠음. 





그냥 비활성만 포기하면, 스크린 캡쳐도 가능하고 인터페이스 위치 다 일일히 좌표 분석해서 마우스 매크로 만드는 것도 가능함.

추천 비추천

1

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2907 설문 사이버 렉카로 가장 피해 입은 것 같은 스타는? 운영자 24/07/22 - -
2898 AD [AFK: 새로운 여정] 사전예약 진행 중! 운영자 24/07/18 - -
2909 AD [메이플스토리M] 신규 캐릭터 에릴 라이트 업데이트 운영자 24/07/25 - -
37265 공지 신희 갤러리 통합공지 (2021-05-02) Plancard갤로그로 이동합니다. 21.05.02 1812 2
2 공지 카미히메 프로젝트 갤러리 공지사항 로이탄먹는놈갤로그로 이동합니다. 16.09.01 8572 1
39908 일반 무료연 70 떳다! [2] ㅇㅇ(219.254) 07.24 51 0
39907 일반 오늘 룰렛40연 나와서 1일더 기다려야 되네 ㅇㅇ(223.39) 07.23 24 0
39906 일반 님들 요즘 신희 악세줄때 무슨기준으로 줌? [7] ㅇㅇ(125.251) 07.22 53 0
39905 일반 젠장 내일50연차 안나오면 미확정 못가져오네... [2] ㅇㅇ(183.109) 07.22 44 0
39904 일반 왜 구 한정들 라인업에 끼워놨나 했더니 [2] ㅇㅇ(203.234) 07.21 60 0
39903 일반 치트키 쓰고 핌블베트르컷 [1] DenpaOtoko갤로그로 이동합니다. 07.20 58 0
39902 일반 호박 아르테미스 보니까 뭔가 반갑네 [1] 녹색다시마갤로그로 이동합니다. 07.19 54 0
39901 일반 그나저나 SR R 신희가 뉴절먹으로 무료연에서 나와준거보면 ㅇㅇ(183.109) 07.18 39 0
39900 일반 룰렛 7일째 10연인데 이게 맞나 [3] E401갤로그로 이동합니다. 07.18 59 0
39899 일반 드디어 맨듬 [4] ㅇㅇ(219.254) 07.15 65 0
39898 일반 아니 확률 5배라매 5배라매!!!!!!!!!!! [3] 나자얀갤로그로 이동합니다. 07.14 72 0
39897 일반 상점서 파는 미라티케론 못들고오네 녹색다시마갤로그로 이동합니다. 07.13 45 0
39896 일반 내다버린 만엔어치 웨폰티켓 가챠 [2] DenpaOtoko갤로그로 이동합니다. 07.12 62 0
39895 일반 드디어 네푸 각성 완료 [3] ㅇㅇ(219.254) 07.12 62 0
39894 일반 지금 전속성 이런 상태인데 [3] Rockgil갤로그로 이동합니다. 07.11 77 0
39893 일반 진짜 들어갔네 녹색다시마갤로그로 이동합니다. 07.11 63 0
39892 일반 무료연이 끝나면 뭘하죠? [1] 녹색다시마갤로그로 이동합니다. 07.11 68 0
39890 일반 숭하네 진짜 [3] 녹색다시마갤로그로 이동합니다. 07.11 77 0
39888 뉴스 역사 속으로 사라지는 PC통신, 천리안 문 닫는다 [1] 게임메카갤로그로 이동합니다. 07.09 9668 0
39889 일반 낼점검이니 오늘내로 무료연 포인트 교환 받을 것 [7] DenpaOtoko갤로그로 이동합니다. 07.10 78 0
39887 일반 공명 영령 레벨 15까지 올려봤는데 [5] 카갤러(219.254) 07.09 57 0
39886 일반 S 영령 궁금하다는 사람있어서 카갤러(219.254) 07.08 59 0
39885 일반 드...드디어 공명열었다 [2] 카갤러(219.254) 07.08 53 1
39884 북미 북미 한반도 유니온 모집합니다 [3] 기간트(125.132) 07.08 50 0
39883 일반 드디어 새 S 영령이다 [8] 카갤러(219.254) 07.08 69 1
39882 일반 최근에 무료연으로 헤카테 나와서 파티에 때려넣고 써봤는데 [1] 카갤러(219.254) 07.07 59 0
39881 일반 뇌속 메인 환수 140환쓰는데 [15] 카갤러(219.254) 07.07 68 0
39880 일반 11일부터 16-18년 신희해방 무기 안나옴 [3] E401갤로그로 이동합니다. 07.04 83 0
39879 북미 유니온 탈퇴... [1] 기간트(125.132) 07.02 61 0
39878 일반 레오니다스가 있었는데요 [2] DenpaOtoko갤로그로 이동합니다. 07.01 82 0
39877 일반 유료 수영복 스텝가챠 후기. [3] 나자얀갤로그로 이동합니다. 07.01 87 0
39876 일반 올해 목표 하나 달성했다 [2] DenpaOtoko갤로그로 이동합니다. 06.30 68 0
39875 일반 아 씨발 이번달 타워 안했었지 하고서 밀고있었는데 [3] ㅇㅇ(203.234) 06.30 56 0
39873 뉴스 전방위 체질개선, 2024년 상반기 10대 뉴스 게임메카갤로그로 이동합니다. 06.28 9457 0
39874 일반 이번 수냐루좀 많이 쎄네 [7] DenpaOtoko갤로그로 이동합니다. 06.28 108 0
39872 일반 매크로 올리던 고대의 카붕이인데 에로랩스 복귀하려 함(리세추천좀) [4] 카갤러(147.47) 06.28 87 0
39871 일반 계속 게임 프리징걸리네 [2] ㅇㅇ(222.100) 06.28 50 0
39870 일반 페스까다가 이거 먹었는데 E401갤로그로 이동합니다. 06.27 60 0
39869 일반 수속 웨펀페스 마렵네... E401갤로그로 이동합니다. 06.27 44 0
39868 일반 무료연 끝나자마자 룰렛 무료연을 하네 ㅋㅋㅋ [1] E401갤로그로 이동합니다. 06.27 74 0
39867 일반 에픽퀘 다털어서 가챠티켓 모앗는데 존버됨? [2] 나자얀갤로그로 이동합니다. 06.26 67 0
39866 일반 정상전 첨으로 합맞춰서 제대로 뛰어보네 [4] DenpaOtoko갤로그로 이동합니다. 06.23 83 0
39865 일반 뉴절먹 [4] 녹색다시마갤로그로 이동합니다. 06.22 76 0
39864 일반 혈 존나 뚫리네 [3] E401갤로그로 이동합니다. 06.21 94 0
39863 일반 수속 평타덱 바꿀 신희 추천받슴 [10] E401갤로그로 이동합니다. 06.21 98 0
39862 일반 얘는 도대체 뭐냐 E401갤로그로 이동합니다. 06.20 52 0
39861 일반 나는 수속이벤이 좋다 E401갤로그로 이동합니다. 06.20 46 0
39860 일반 오토러 나에겐 너무나 좋은 패치네(이미지많음) 토립갤로그로 이동합니다. 06.20 71 0
39859 정보 기간한정신희들 통상라인업으로 편입될 예정 [2] DenpaOtoko갤로그로 이동합니다. 06.20 109 0
39858 일반 이거 돌릴까 고민했는데 확률에 주작이 있나보네요 [4] 나자얀갤로그로 이동합니다. 06.20 72 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2