插件开发手册

插件产品介绍
Game-Plug 是一款功能强大的 Windows 逆向开发插件,兼容 VC++、Delphi、VB、按键精灵、火山 PC、等多种编程语言调用。它面向编程人员提供窗口、内存、线程、汇编、HOOK、注入、Call、按键、封包、驱动防检测等全方位操作命令,并配有对应的使用案例示范,简单易学、上手快、实用性强。
目录导航

后台取窗口帧率 - GetFps

接口 ID 227 | 分类:窗口绑定与显示模式 | 免费功能

作用说明

获取绑定窗口的实时渲染帧率(fps,每秒渲染的画面帧数)。需先用 BindWindow 绑定窗口,且键鼠模式必须用 2d / 3d / vm 这类注入模式(windows / normal 等消息模式不加载后台模块,本方法恒返回 0),帧率每 0.5 秒统计刷新一次,绑定后正常渲染 1~2 秒数值才稳定,适合监测游戏是否在后台正常跑帧。无参数。注意抓图模式必须与目标进程位数匹配:dx2 只服务 32 位目标、dx3 只服务 64 位目标;填错时 BindWindow 直接返回 0(GetLastError = -4),后台模块不会注入,本方法自然也返回 0。

参数说明

本方法无需传入参数。

VC++ 控制台调用示例(可直接编译运行)
// 说明:本示例为完整 x64 控制台工程,整段复制覆盖新建控制台工程的 main.cpp 即可编译运行。
//   1. VS2019 新建「控制台应用」,项目属性 -> 平台选 x64,才能加载 64 位 DLL。
//   2. 项目属性 -> C/C++ -> 预编译头 -> 改为「不使用预编译头」,否则默认找 pch.h 会报 C1010。
//   3. 把 x64Game-Plug.dll 放到 exe 同目录(#import 与免注册加载都需要)。
//   4. 源码保存为 UTF-8 带 BOM,避免中文乱码。
#include <iostream>
#include <clocale>
#include <windows.h>
#include <comdef.h>

// 免注册加载:用 IGamePlug 智能指针装载
// rename 是为避开 windows.h 的 FindWindow 宏冲突,接口里的 FindWindow 在 C++ 侧改名为 FindWindowGP
#import "x64Game-Plug.dll" no_namespace rename("FindWindow", "FindWindowGP")

static HMODULE      g_hDll = NULL;
static IGamePlugPtr g_plug;

static bool LoadPlug() {
    const wchar_t* paths[] = {
        L"x64Game-Plug.dll",
        L"..\\x64Game-Plug.dll"
    };
    for (int i = 0; i < (int)(sizeof(paths) / sizeof(paths[0])); ++i) {
        g_hDll = ::LoadLibraryW(paths[i]);
        if (g_hDll) break;
    }
    if (!g_hDll) {
        std::cout << "LoadLibrary failed: put x64Game-Plug.dll next to the exe" << std::endl;
        return false;
    }
    typedef HRESULT (__stdcall *GamePlugCreateFn)(IGamePlug**);
    GamePlugCreateFn fn = (GamePlugCreateFn)::GetProcAddress(g_hDll, "GamePlugCreate");
    if (!fn) { std::cout << "GetProcAddress GamePlugCreate failed" << std::endl; return false; }
    HRESULT hr = fn(&g_plug);
    if (FAILED(hr)) { std::cout << "GamePlugCreate failed: 0x" << std::hex << hr << std::endl; return false; }
    return true;
}
 

//实例示范: 64位天龙八部 
int main() {
    if (!LoadPlug()) { system("pause"); return 1; }
 //你的插件授权码,注意最好别明文填写,建议从你的网络云读取下来传入,可防止你的辅助被破解后,随时更改授权码,让辅助中收费命令工作作废!
    g_plug->SetUsername(_bstr_t(L"U6-YYTF3FERSRA87LPE"));
    // ---------- 调用插件本命令方法如下 ----------
    try {
        // 先用 dx 系模式绑定目标窗口 游戏窗口;32 位 2D 游戏用 dx2(私服传奇用 dx2.1)  ; 是 64 位 3D 游戏用 dx3 )
        hyper hwnd = g_plug->FindWindowGP(_bstr_t(L""), _bstr_t(L"《新天龙八部》 0.08.3907"));
        if (hwnd != 0) {
            VARIANT_BOOL ok = g_plug->BindWindow(hwnd, _variant_t(L"dx3"),
                _variant_t(L"3D"),   //需要写 3D
                _variant_t(L"windows"));
            std::cout << "绑定结果(1=成功): " << (ok ? 1 : 0) << std::endl;
        }
        // 绑定后稍等 1~2 秒再取帧率,数值才稳定
        ::Sleep(1500);
        int length = 100;
        for (size_t i = 0; i < length; i++)
        {
            Sleep(300);
            double fps = g_plug->GetFps(); //获取fps刷新值
            std::cout << "当前fps 帧率: " << fps << " FPS" << std::endl;
        }
    }
    catch (_com_error& e) {
        std::wcout << L"COM error: " << e.ErrorMessage() << std::endl;
    }

    g_plug->Release();
    system("pause");
    return 0;
}
	
返回值

类型 double。返回绑定窗口的当前渲染帧率(单位:帧/秒),每 0.5 秒刷新一次。返回 0 表示取不到帧率:未绑定窗口、键鼠模式用了 windows / normal 等消息模式(后台模块未注入)、后台模块未就绪,抓图模式 dx2 / dx3 与目标进程位数不匹配导致绑定失败,或该游戏的渲染方式不在支持范围内。

常见注意事项

1)必须先 BindWindow 且键鼠模式填 2d / 3d / vm 注入类模式;填 windows / normal 时后台模块不加载,本方法恒返回 0,与抓图模式无关。2)绑定后等 1~2 秒再取值,首次统计需要预热。3)窗口最小化时游戏若停止渲染,返回值会随之降低甚至归 0,属正常现象,不代表功能失效。4)持续监测可每隔半秒取一次,无需频繁调用。5)本功能为免费功能,无需授权码。6)抓图模式必须与目标进程位数匹配:32 位游戏用 dx2,64 位游戏用 dx3;填错时 BindWindow 返回 0、GetLastError = -4,改对模式后重新绑定即可。键鼠模式 2d / 3d / vm 都会触发后台模块注入(三者等价),windows / normal 不会。7)已实测可用的组合:32 位 Direct3D8 老 2D 引擎(热血传奇,dx2 + 2d,约 32 FPS)需配套含真实 Present 挂点的新版后台模块(2026-11-13 之后编译),旧版返回 0;64 位 Direct3D11 / DXGI 引擎(新天龙八部,dx3 + 2d,约 25 FPS)由后台模块的 DXGI 交换链挂点直接支持,无需额外改动。8)Direct3D9 纯 2D、DirectDraw、GDI BitBlt 等渲染方式暂无计数挂点,返回 0。