5

ゲームに挿入する .dll を作成しました。Alt + s を押した後、ピクセル検出を実行しますが、ゲームが遅れます。それを修正する可能性はありますか?

赤い色を検出し、mouse3 を押してゲーム内で発射しますが、遅すぎてゲームが遅れます。

Sleep() を削除しようとしましたが、さらに遅れます。助言がありますか?

#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;
}
4

2 に答える 2

4

You're doing nothing but call GetPixel() for 50 milliseconds. That's a 50 millisecond lag right there. What did you expect?

Removing the Sleep call just means you lag more often, and each time still for 50 milliseconds. That too is expected.

于 2012-12-03T15:44:25.103 に答える
1

いくつかのポイント:

1) while ループがタイトで、CPU を集中的に使用しています。それをサポートする CPU がある場合は、そこに __mm_pause 組み込み関数を配置するか ( ::YieldProcessor())、試してください。::SwitchToThread()

2)GetPixel非常に遅い IIRC です。HBITMAP

于 2012-12-03T15:45:42.150 に答える