2012-12-03 2 views
5

게임에 삽입하고있는 .dll을 만들었습니다. alt + s를 누르면 픽셀 감지가 실행되지만 게임은 느려집니다. 그것을 고칠 가능성이 있습니까?내 코드를 주입 ​​한 후 게임이 뒤처집니다.

붉은 색을 감지하고 mouse3을 누르고 게임 중 촬영 속도가 너무 느리고 게임이 지연됩니다.

나는 수면()을 제거하려고했지만 더 많이 뒤졌습니다. 어떤 제안?

#include <windows.h> 
#include <gdiplus.h> 

const int SX = GetSystemMetrics(SM_CXSCREEN); 
const int SY = GetSystemMetrics(SM_CYSCREEN); 

const int SCREEN_X = (SX/2); 
const int SCREEN_Y = (SY/2); 
const COLORREF red=RGB(255, 0, 0); 
const int Sound[]={SND_ALIAS_SYSTEMASTERISK,SND_ALIAS_SYSTEMEXCLAMATION}; 
const int State[]={MOUSEEVENTF_MIDDLEDOWN,MOUSEEVENTF_MIDDLEUP}; 

bool PixelCheck(HDC hdc) 
{ 
    time_t stop=GetTickCount()+50; 
    bool result=false; 
    while(GetTickCount()<stop) if(GetPixel(hdc,SCREEN_X,SCREEN_Y) == red) result=true; 
    Sleep(1); 
    return result; 
} 

DWORD WINAPI ThreadFunction(PVOID pvParam) 
{ 
    HDC hdc=GetDC(0); 
    bool shotbot=false,isdown=false; 
    INPUT ip; 
    ip.type=INPUT_MOUSE; 
    ip.mi.dx=0; 
    ip.mi.dy=0; 
    ip.mi.dwExtraInfo=0; 
    while(true) 
    { 
     if(GetAsyncKeyState(0xA4) && GetAsyncKeyState(0x53)) 
     { 
      shotbot=!shotbot; 
      PlaySound((LPCSTR)Sound[shotbot],NULL,SND_ALIAS_ID); 
     } 
     Sleep(1); 
     if((shotbot&&PixelCheck(hdc))||isdown) 
     { 
      ip.mi.dwFlags=State[isdown]; 
      SendInput(1,&ip,sizeof(INPUT)); 
      isdown=!isdown; 
     } 
    } 
    ReleaseDC(0, hdc); 
    return 0; 
} 

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) 
{ 
    if(fdwReason==DLL_PROCESS_ATTACH) SetThreadPriority(CreateThread(0,0,ThreadFunction,0,0,NULL),THREAD_PRIORITY_NORMAL); 
    return TRUE; 
} 
+0

스레드 방식을 덜 자주 호출 하시겠습니까? –

답변

4

당신은 50 밀리 초 동안 GetPixel()를 호출하지만 아무것도하지 않고 있습니다. 바로 거기에 50 밀리 초 지연이 있습니다. 너는 무엇을 기대 했는가?

Sleep 호출을 제거하면 더 자주 지연되며 매번 50 밀리 초 동안 계속 대기하게됩니다. 그것도 역시 기대된다.

1

몇 가지 포인트 :

1) 귀하의 while 루프가 많이 꽉 CPU입니다. 당신이 그것을 지원하는 CPU이 경우, HBITMAP

의 픽셀 값을 읽을 수있는 빠른 방법이있을 수 있습니다 ,, ( ::YieldProcessor()) 거기에 __mm_pause 고유을 넣어 또는 ::SwitchToThread()

2) GetPixel은 대단히 느린 IIRC입니다 시도

관련 문제