2012-12-03 14 views
5

0 इंजेक्शन के बाद गेम laggs मैंने बनाया है। डीएल जो मैं खेल में इंजेक्शन कर रहा हूँ। जब मैं alt + s दबाता हूं लेकिन गेम laggs दबाता है तो यह पिक्सेल पहचान चलाता है। क्या इसे ठीक करने की कोई संभावना है?खेल मेरे कोड

यह लाल रंग का पता लगाता है, माउस 3 दबाता है और गेम में यह शूट करता है लेकिन बहुत धीमा होता है और गेम लगी हुई है।

मैंने नींद को हटाने की कोशिश की() लेकिन यह अधिक अंतराल है। कोई सुझाव?

#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) आपका जबकि पाश तंग और सीपीयू गहन है। यदि आप एक सीपीयू है कि यह समर्थन करता है है, तो में (::YieldProcessor()) __mm_pause आंतरिक रख सकते हैं या कोशिश ::SwitchToThread()

2) GetPixel काफी धीमी गति से IIRC है ,, एक HBITMAP

से पिक्सेल मूल्य को पढ़ने के लिए एक तेज तरीका हो सकता है