게임에 시뮬레이션 된 입력을 보내야하는 게임 관련 프로그램을 작성했습니다 (화면의 상단 창이고 전체 화면 모드로 실행 됨). 어려움을 겪은 후에 드디어 마우스 움직임 (커서 드래그)과 키보드 입력이 작동하지만 어떤 이유로 게임이 마우스 클릭에 반응하지 않습니다.마우스 보내기 DirectX 게임으로 실행 관리자로 실행
나는 다음과 같은 시도 :
#if TRUE // SendInput works for keyboard simulation and mouse drag, but not clicks:
INPUT mouse = {0};
mouse.type = INPUT_MOUSE;
mouse.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &mouse, sizeof(INPUT));
Sleep(100);
ZeroMemory(&mouse, sizeof INPUT);
mouse.type = INPUT_MOUSE;
mouse.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &mouse, sizeof(INPUT));
#else // tried this, but it did not work:
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(75);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
#endif
내가 일반적으로 메시지를 보내는되었다 직면,하지만이 문제는 응용 프로그램의 권한을 보내는> 게임 프로세스 권한에 의한 깨달았다 첫 번째 딜레마. 이 후 특정 게임 창/스크린에만 등록하는 키 프레스와 관련된 또 다른 문제가 발생했지만 일부 검색 후에는이를 극복하기 위해 스캔 코드를 사용할 수있었습니다. 예를 들어 :
void SendSpacePress(bool bHardwareLevel){
INPUT space = {0};
space.type = INPUT_KEYBOARD;
space.ki.time = 0;
space.ki.dwExtraInfo = 0;
if(!bHardwareLevel){
space.ki.wVk = VK_SPACE;
}else{
space.ki.wScan = 0x39; // physical keyboard scan code
}
space.ki.dwFlags = bHardwareLevel ? KEYEVENTF_SCANCODE : 0;
SendInput(1, &space, sizeof(INPUT));
Sleep(rand()%25 + 25);
space.ki.dwFlags = bHardwareLevel ? KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP : KEYEVENTF_KEYUP;
SendInput(1, &space, sizeof(INPUT));
}
또한 아래와 같이 마우스 움직임을 사용하여 입력을 할 수 있었다 :
void PanMouse(){
INPUT mouse = {0};
mouse.type = INPUT_MOUSE;
mouse.mi.time = 0;
mouse.mi.mouseData = 0;
mouse.mi.dwExtraInfo = 0;
mouse.mi.dwFlags = MOUSEEVENTF_MOVE;
mouse.mi.dx = rand()%10 -5;
mouse.mi.dy = rand()%10 -5;
SendInput(1, &mouse, sizeof(INPUT));
}
지금 내가 가진 큰 문제는 게임 내 시뮬레이션 마우스 클릭을 등록을 거부합니다. 나는 바람직하게 후킹에 뛰어 들지 않고 마우스 입력을 보내는 방법을 좋아할 것이다. (이 게임에는 여러 클라이언트 측의 안티 - 치트 메커니즘이 있기 때문에 어떤 종류의 외부 프로세스 후크 나 DLL 주입이 보호를 유발할 것이라고 추측 할 것입니다.) 필자가 읽은 것부터, 다음을위한 커스텀 드라이버를 작성해야 할 수도 있습니다. 시뮬레이트 된 하드웨어 마우스이므로 입력은 커널 수준에서 이루어집니다. 바람직한 옵션은 아니지만 필요하다면 그렇습니다. (? 필요가있을 경우에, 아무도 내가 드라이버를 쓰는 주위 엉망 적이없는이에 대한 유용한 정보를 제공하지만, 내 생각 모두를위한 첫 번째 시간이있을 수 있습니다.)
TL을, DR : 나는 어떻게해야합니까 시뮬레이트 된 마우스 클릭을 하드웨어가 아닌 입력을 무시하는 것처럼 보이는 게임에 등록하려면? (키보드 입력을 시뮬레이트 할 때 KEYEVENTF_SCANCODE
을 사용하는 것과 유사하게 마우스 클릭이 합법적이라고 생각하도록 게임을 속이려면 어떻게해야합니까?)
모든 제안, 해결책 및 조언을 부탁드립니다. 미리 감사드립니다!
게임이 처음부터 관리자로 실행되는 이유는 무엇입니까? –
@ChuckWalbourn, 게임 실행 방법. 아마도 다른 프로세스가이 프로세스를 수정하지 못하게하려고했을 것입니다. 불행히도 낮은 권한 수준에서는 실행할 수 없습니다. – SpencerD
admin으로 실행중인 다른 프로세스에서 관리자를 보호하는 방법은 없습니다. MSFT가 게임 개발자에게 게임을 실행하기 위해 관리자 권한이 필요 없다고 말하는 약 12 년을 에 보냈기 때문에 묻습니다. 설치 관리자. 관리자가 아니라 실행합니다. [게임 개발자를위한 사용자 계정 컨트롤] (https://msdn.microsoft.com/en-us/library/windows/desktop/ee419001.aspx) –