본문 바로가기
IT와 코딩

파이썬 pyautogui 로 게임이 동작하지 않을 때!! pydirectinput

by 불타는통닭 2022. 10. 14.

pyautogui로 키보드 마우스를 움직이게 하는 유용한 모듈이다..

그러나 막상 게임에 적용시켜보면 움직이지 않는다

마우스는 좀 움직이는 거 같은데.. 왜 동작이 안될까? 막혀있는 건가?? 그런 생각을 하게 될 것이다.

그래서 유튜브를 열심히 뒤져봤는 데.. 띠옹~~ 해답이 나왔다

바로바로 바로

왜 pyautogui가 동작하지 않는가??

영어로 되어 있어서.. 알아먹기 힘들어서 번역기로 좀 번역해 보았다..

아마 DirectX 기반으로 만들어진 게임에 해당하는 사항인 듯싶다

결론은 pydirectinput 모튤을 쓰면 된다는 거!!!

pip install pydirectinput

사용방법은 pyautogui 랑 비슷하다. pyautogui. 대신 pydirectinput을 사용하면 된다

import pydirectinput

- 퍼온 글 번역 -

PyAutoGUI를 사용한 비디오 게임 봇팅 튜토리얼 이후로 많은 사람들이 PyAutoGUI가 자신이 플레이하는 비디오 게임에서 작동하지 않는다고 말했습니다. 그래서 이 영상에서는 무슨 일이 일어나고 있는지 설명하고 어떻게 고칠 수 있는지 보여드리겠습니다. 그렇다면 PyAutoGUI가 일부 비디오 게임에서 작동하지 않는 이유는 무엇입니까? Windows에서 PyAutoGUI는 약간 더 오래된 Windows API를 사용하여 마우스 및 키보드 입력을 시뮬레이션합니다. 일반적으로 이것은 괜찮지만 대부분의 3D 비디오 게임과 같이 DirectX를 많이 사용하는 프로그램과 상호 작용할 때 문제가 발생할 수 있습니다. DirectX가 무엇인지 모르는 경우 비디오 게임 개발을 쉽게 하기 위해 Microsoft에서 작성한 라이브러리 및 API 모음일 뿐입니다. 그것은 매우 성공적이었고, 이것이 기본적으로 Windows가 PC 게임을 지배하는 이유입니다. DirectX의 하위 집합 중 하나는 DirectInput입니다. 그리고 DirectInput은 기본적으로 비디오 게임 개발자가 게임에 대한 사용자 입력을 처리할 때 사용할 수 있는 더 쉽고 강력한 인터페이스입니다. 많은 경우 게임 개발자는 DirectInput만 지원하기로 선택할 것입니다. 왜냐하면 개발이 덜 진행되고 플레이어가 눈치채지 못할 가능성이 높기 때문입니다. 따라서 우리가 가진 문제를 해결하려면 PyAutoGUI가 현재 사용 중인 API 대신 DirectInput Windows API를 사용하도록 하면 됩니다. 그래서 정확히 그렇게 하기 위해 Python 패키지를 작성했습니다. 나는 그것을 PyDirectInput이라고 불렀다. 그리고 PyAutoGUI가 잘못하는 것과 내 라이브러리에서 이를 수정하는 방법에 대해 정확히 알아보기 위해 README의 시작 단락을 읽고 실제로 사용하는 방법을 보여 드리겠습니다. "이 라이브러리는 PyAutoGUI 마우스 및 키보드 입력의 기능을 복제하는 것을 목표로 하지만 DirectInput 스캔 코드와 보다 현대적인 SendInput() win32 기능을 활용합니다. PyAutoGUI는 VK(가상 키 코드)와 더 이상 사용되지 않는 mouse_event() 및 keybd_event()를 사용합니다. win32 기능입니다. 일부 응용 프로그램, 특히 비디오 게임 및 DirectX에 의존하는 기타 소프트웨어에서 PyAutoGUI가 작동하지 않을 수 있습니다. 이러한 상황에 처한 경우 이 라이브러리를 사용해 보십시오!" 다음을 사용하여 PyDirectInput을 간단히 설치합니다. pip install pydirectinput 다음과 같은 간단한 PyAutoGUI 스크립트가 있는 경우: import pyautogui import time time. sleep(4) pyautogui.keyDown('w') time.sleep(1) pyautogui.keyUp('w') pyautogui를 pydirectinput으로 교체하기만 하면 DirectInput 게임으로 이를 얻을 수 있습니다. 두 프로젝트 간에 모든 함수 선언을 동일하게 만들었으므로 둘 사이를 쉽게 바꿀 수 있습니다. import pyautogui import pydirectinput import time time.sleep(4) pydirectinput.keyDown('w') time.sleep(1) pydirectinput.keyUp('w') PyDirectInput에서 PyAutoGUI의 모든 기능을 구현하지는 않았습니다. PyAutoGUI를 계속 사용해야 하는 모든 화면 읽기 기능. 또 다른 큰 것은 지속 시간이 있는 마우스 움직임으로, 화면에서 커서를 천천히 움직이는데 구현하지 않았습니다. PyDirectInput에서 moveTo() 기능을 사용하면 화면의 해당 지점으로 즉시 점프합니다. README에서 저는 이식할 시간이 없었던 모든 기능을 기록했습니다. 따라서 이러한 누락된 기능이 필요한 경우 오픈 소스 프로젝트에 참여할 수 있는 좋은 기회입니다. 작업이 완료되면 풀 리퀘스트를 보내주십시오. 도움이 필요하면 기꺼이 도와드리겠습니다. 오픈 소스에 기여한 적이 없다면 이 방법이 매우 친숙한 방법일 것입니다. 볼 수 있는 모든 PyAutoGUI 소스 코드가 있고 내가 참조하기 위해 이미 수행한 작업이 있기 때문입니다. , 그래서 그것은 단지 많은 복사/붙여넣기 및 빈 유형 항목을 채워야 합니다. 그리고 물론 테스트. 이 서면 가이드는 여기에서도 찾을 수 있습니다. 오픈 소스 프로젝트에 참여할 수 있는 좋은 기회입니다. 작업이 완료되면 풀 리퀘스트를 보내주십시오. 도움이 필요하면 기꺼이 도와드리겠습니다. 오픈 소스에 기여한 적이 없다면 이 방법이 매우 친숙한 방법일 것입니다. 볼 수 있는 모든 PyAutoGUI 소스 코드가 있고 내가 참조하기 위해 이미 수행한 작업이 있기 때문입니다. , 그래서 그것은 단지 많은 복사/붙여넣기 및 빈 유형 항목을 채워야 합니다. 그리고 물론 테스트. 이 서면 가이드는 여기에서도 찾을 수 있습니다. 오픈 소스 프로젝트에 참여할 수 있는 좋은 기회입니다. 작업이 완료되면 풀 리퀘스트를 보내주십시오. 도움이 필요하면 기꺼이 도와드리겠습니다. 오픈 소스에 기여한 적이 없다면 이 방법이 매우 친숙한 방법일 것입니다. 볼 수 있는 모든 PyAutoGUI 소스 코드가 있고 내가 참조하기 위해 이미 수행한 작업이 있기 때문입니다. , 그래서 그것은 단지 많은 복사/붙여넣기 및 빈 유형 항목을 채워야 합니다. 그리고 물론 테스트. 이 서면 가이드는 여기에서도 찾을 수 있습니다. 모든 PyAutoGUI 소스 코드를 살펴보고 참조하기 위해 이미 수행한 작업이 있으므로 많은 복사/붙여넣기 및 빈 유형 항목을 채워야 합니다. 그리고 물론 테스트. 이 서면 가이드는 여기에서도 찾을 수 있습니다. 모든 PyAutoGUI 소스 코드를 살펴보고 참조하기 위해 이미 수행한 작업이 있으므로 많은 복사/붙여넣기 및 빈 유형 항목을 채워야 합니다. 그리고 물론 테스트. 이 서면 가이드는 여기에서도 찾을 수 있습니다. https://learncodebygaming.com/blog/py... 내 장비:https://learncodebygaming.com/gear

*업데이트* 마우스 기능 [click(), mouseDown(), mouseUp()...]이 너무 느리면 선택적 _pause 인수를 false로 설정하는 것이 좋습니다. pydirectinput.click(x=300, y=100, _pause=False). 이 _pause 기능을 완전히 제거해야 한다고 생각하면 알려주십시오.

https://www.youtube.com/watch?v=LFDGgFRqVIs&ab_channel=LearnCodeByGaming

pydirectinput



댓글