#include #include #include "vcversion.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved ) { switch (dwReason) { case DLL_PROCESS_ATTACH: { DisableThreadLibraryCalls((HMODULE) hModule); DWORD frame_limit = 30; FILE* f = fopen("fpslimit.cfg", "r"); if(f) { fscanf(f,"%d",&frame_limit); fclose(f); } int nArgs; LPWSTR *args = CommandLineToArgvW(GetCommandLineW(), &nArgs); int i = 1; while( i < nArgs && swscanf(args[i], L"-fpslimit=%d", &frame_limit) == 0) { i++; } vcversion::DetermineVCVersion(); DWORD dwProt; DWORD p = vcversion::AdjustOffset(0x602D68); VirtualProtect((void*)p, 4, PAGE_EXECUTE_READWRITE, &dwProt); *(DWORD*)p = frame_limit; VirtualProtect((void*)p, 4, dwProt, &dwProt); p = vcversion::AdjustOffset(0x9B48EC); *(DWORD*)p = frame_limit; } case DLL_PROCESS_DETACH: { } } return TRUE; }