자동화

조회 수 887 추천 0 댓글 10

안녕하세요. C#으로 비활성 매크로 제작중에 질문드립니다.


게임 화면 핸들러를 가져와 캡쳐해 이미지를 찾아서 상황에 맞는 키보드 이벤트를 보내주는 매크로를 만들려고합니다,


계산기 등의 화면의 이미지는 잘 가져오고 sendMessage, postMessage가 잘 작동하는데


제가 접근하는 게임에는 이미지도 못가져오고 send, post Mesage가 작동하지 않습니다.


이미지 서치는 꼼수를 써서 해결했는데, 키보드 이벤트가 발생하지 않습니다.


혹시 뚫는 방법을 알수있을까요? 힌트주시면 감사하게씁니다.ㅠㅠ


  • profile
    소심비형 2019.12.07 17:10

    일단 확인해봐야 하는 부분은... 비주얼 스튜디오가 관리자 권한으로 실행되었는지 봐야 합니다. 윈도우 API를 호출할 충분한 권한이 없으면 동작하지 않거든요. 첫번째 확인해야 할 사항이죠~

  • 타탕우 2019.12.07 18:29

    소중한 답변 감사드립니다.
    관리자 권한으로 실행하니 비활성 이미지 서치를 잘 해옵니다.
    하지만, 키보드 이벤트는 발생하지 않습니다. 물론 제 코드 문제 같습니다.

    모모플레이어 예제를 보니, 부모 윈도우를 가져오고, 자식 핸들러(랜더링 담당)에게 마우스, 키이벤트를 발생하더라구요. 하지만 제가 하는 게임은 부모 윈도우 하나만있고, 따로 자식 핸들러가 존재하지 않는것 같습니다.(Spy++로 확인했으나, 자식 핸들러가 있으면 + 탭이 나와서 누르면 자식핸들러를 보여주는데 + 탭이 보이지 않았습니다.)

    보통 제일 부모 윈도우에는 키 이벤트를 발생시키지 않나요?
    부모 윈도우의 자식 핸들러에게만 키 이벤트를 발생시키는건지, 핸들러가 존재하지만 숨어있는건지 잘 모르겠네요.

  • profile
    소심비형 2019.12.07 19:13
    최상위(보통 매인 핸들러라고 부름) 핸들러에도 이벤트는 전달됩니다. 코드 문제일듯 하구요. 참고로 Post나 Send는 스페셜키를 사용할 수 없습니다. 참고로, 비활성이라도 키 입력은 입력 포커스에 영향을 받으니 이 부분도 체크해보셔야 해요.
  • 타탕우 2019.12.07 19:52
    아, 메인 핸들러에도 이벤트는 전달되는군요.
    스페셜키는 사용안하고 방향키, i(게임 단축키)만 테스트해보았는데 반응은 없습니다.
    말씀해주신데로 게임 채팅 입력창에 커서를주고 매크로에서 시작 버튼을 누르면 채팅입력창의 포커스는
    사라지더라구요.

    메인 핸들러 주소도 잘가져오고, 그걸이용해서 이벤트를 줬는데 왜 안되는지 의문입니다.ㅠㅠ
    혹시 몰라 이벤트 소스 첨부합니다.

    IntPtr findwindow = FindWindow(null, "gameName");
    if (findwindow != IntPtr.Zero)
    {
    // WM_KEYDOWN : 0x100, VK_I : 0x49
    PostMessage(findwindow, WM_KEYDOWN, (IntPtr)VK_I, IntPtr.Zero);
    // WM_KEYUP : 0x101, VK_I : 0x49
    PostMessage(findwindow, WM_KEYUP, (IntPtr)VK_I, IntPtr.Zero);
    }
  • profile
    소심비형 2019.12.07 20:35

    어디에 이벤트를 주는지 모르겠지만... 일단 메모장이나 기타 다른 프로그램에 테스트 해보시고 함수에 문제가 없는지 판단해야 할거 같아요. 메모장에 잘 동작한다면 키보드 입력하려는 창이 윈도우 이벤트를 가로채서 내부 메시지로 처리하는지 확인하셔야 해요. 윈도우 이벤트를 정상적으로 받았더라도 윈도우 컨트롤이 아닌 자체 그래픽인 ActiveX나 OpenGL등등... 처리하는거라면 해당 이벤트 어떻게 전달하는지 보셔야 합니다. 근데 보통 게임이 아니라면 잘 동작해야 해요. 게임이라면 별도 처리가 더 필요할거구요.

  • 타탕우 2019.12.07 20:40
    계산기에 postMessage를 주면 정상적으로 값이 들어가더라구요. 게임입니다.ㅠㅠ 이벤트 전달되는지는 어떤걸 공부하면 될까요?
  • profile
    소심비형 2019.12.07 21:13
    일단... 위 글을 자세히 보면요. 포커스가 사라지는 문제랑 관련 있는지 의심됩니다. 핸들 설정된 창을 active와 front 속성을 적용해보시는게 좋을듯 하네요.
  • profile
    소심비형 2019.12.07 21:15

    제가 만든 NGM 매크로 1.0 버전이 소스 공개 되어 있어요. 분석하면서 테스트 해보시면 도움이 될지도 모르겠네요...

  • 타탕우 2019.12.09 16:09
    postMessage를 수정해서 비활성 키보드가 잘 입력되도록 했습니다. 다만, 방향키만 작동을 하지 않습니다. 윈도우 컨트롤 자체가아닌 ActiveX나 OpenGL로 처리하는거라면 이벤트 전달 흐름을 보라고하셨는데요. 제가 발생한 이벤트가 어디로 전달되는지 흐름을 확인하려면 어떻게해야하는지 키워드를 알려주실수있나요?
  • 할량 2020.03.30 00:38

    안녕하세요 저도 SendMeassage로 클릭을 해보려고 하는데 안되서요

    저는 그림판이나 계산기에서도 안되네요

    혹시 도움을 좀 받을 수 있을까요?


List of Articles
분류 제목 글쓴이 최근변경 추천
자유 프로그래밍 게시판 소개 피카부 2023.04.01 0/0
질문 메이플 경매장 오토핫키,c# 기발기발기 2020.01.22 0/0
질문 벽람항로등 리세관련 ADB 명령어 블랙보노 2020.01.18 0/0
질문 파이썬을 이용한 매크로가 게임 내에서 작동이 안됩니다. 1 솜털뭉치 2020.01.31 0/0
질문 배울 언어로 파이썬은 어떤가요? 3 솜털뭉치 2020.04.07 0/0
질문 C# Tesseract 숫자인식 궁금점 1 현질하다털림 2020.02.06 0/0
질문 메이플 파이썬 매크로 실행 인식불가 1 민깨 2019.12.17 0/0
질문 린2m 파이썬으로 매크로 되나요? 10 Baros 2019.12.30 0/0
질문 C# 함수강제종료 ?? 그리고 버튼클릭하게하기 현질하다털림 2019.12.12 0/0
질문 sendMessage, postMessage를 통해 마우스 클릭한 상태... 1 타탕우 2019.12.10 0/0
질문 c# 비활성 방향키 질문드립니다. 2 타탕우 2019.12.09 0/0
질문 비활성 키보드 이벤트 뚫는방법 10 타탕우 2020.03.30 0/0
질문 C++ C# 오토핫키 등 질문있습니다. 5 AutoC 2019.11.28 0/0
질문 매크로 불법성 질문 드립니다. 4 영구야 2019.11.26 0/0
질문 파이썬으로 간단한 메이플 매크로를 만드는데 게임상에... 1 준티 2019.11.19 0/0
질문 c# 크랙해주실분 사레o 저작권x 태태태실 2019.11.12 0/0
질문 프로그램을 직접 개발 할 수 있는 능력을 가진다면 얼... 1 APM 2019.11.16 0/0
질문 c# 쿠랙 해주실분 6 태태태실 2019.11.12 0/0
질문 C# 쓰레드와 static 오류 3 현질하다털림 2019.10.11 0/0
질문 반투명 이미지서치하는데 어떤걸쓰시나요? 1 YDG1314 2019.10.09 0/0
질문 C# 외부dll을 exe실행파일에 넣기 4 현질하다털림 2019.10.09 0/0
Board Pagination Prev 1 345678910 11 Next
/ 11

전체 최신 인기글

전체 주간 인기글