插件开发手册

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

区域找色 - FindColor

接口 ID 155 | 分类:图色 | 定义文件:x64GamePlug.idl

作用说明

区域找色。坐标为绑定窗口的客户区坐标,未绑定 BindWindow 时为桌面屏幕坐标。color 支持多色:BGR六位[-偏差] 用 | 分隔,如 0000FF-202020|FFFFFF;sim 相似度 0~1(1=完全一致);dir 查找方向 0=左上 1=左下 2=右上 3=右下 4=中心向外。命中返回 \"x,y\"(十进制),没找到返回空串

参数说明
参数名方向类型说明
x1[in]long查找/截取区域左上角横坐标(客户区坐标,未绑定窗口时为屏幕坐标)
y1[in]long查找/截取区域左上角纵坐标
x2[in]long查找/截取区域右下角横坐标
y2[in]long查找/截取区域右下角纵坐标
color[in]string (BSTR)颜色字符串,BGR 六位十六进制(如 0000FF 表示纯红);支持多色用 | 分隔,每色可加 -偏差 容差,如 0000FF-202020|FFFFFF
sim[in]double相似度 0~1(1=完全一致):颜色/图片允许的最大差异,越大越严格
dir[in]long查找方向:0=左上(默认,自左上向右下扫描) 1=左下 2=右上 3=右下 4=中心向外(取离区域中心最近的命中点)
VC++ 调用示例(x64,控制台工程)
// 说明:本示例为完整 x64 控制台工程,整段复制覆盖新建控制台工程的 main.cpp 即可编译运行。
//   1. VS2019 新建「控制台应用」,项目属性 -> 平台选 x64,才能加载 64 位 DLL。
//   2. 项目属性 -> C/C++ -> 预编译头 -> 改为「不使用预编译头」,否则默认找 pch.h 会报 C1010。
//   3. 把 x64Game-Plug.dll 放到 exe 同目录(#import 与免注册加载都需要)。
//   4. 源码保存为 UTF-8 带 BOM,避免中文乱码;全站用 regsvr32 注册也可(需管理员)。
#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;

// ---------- 免注册:加载 DLL 并创建对象(发布时把 DLL 放 exe 同目录)----------
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;
}
int main() {
    if (!LoadPlug()) { system("pause"); return 1; }
    // 授权(收费功能需先传入授权码,去 https://www.game-plug.cn/ 获取)
    g_plug->SetUsername(_bstr_t(L"U12-XXXXXXXXXXXXXXXX"));

    // ---------- 调用插件本命令方法如下 ----------
    try {
        long x1 = 0;
        long y1 = 0;
        long x2 = 800;
        long y2 = 600;
        _bstr_t color = L"sample";
        double sim = 0.9;
        long dir = 0;
        _bstr_t s = g_plug->FindColor(x1, y1, x2, y2, color, sim, dir);
        std::wcout << L"结果: " << (wchar_t*)s << std::endl;
    } catch (_com_error& e) {
        std::wcout << L"COM error: " << e.ErrorMessage() << std::endl;
    }

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

返回值

返回第一个命中点坐标「x,y」(十进制);未找到返回空串。

常见注意事项
  • 以上图色方法为收费功能,使用前需先调用 SetUsername 传入有效授权码(示例开头已激活该调用,发布时请改为你自己的授权码)。
  • 颜色统一用 BGR 六位十六进制(与常见的 RGB 相反),例如纯红写作 0000FF、洋红写作 FF00FF;多色用 | 分隔,单色可加 -偏差 容差。
  • 坐标为绑定窗口的客户区坐标;未调用 BindWindow 绑定时退化为桌面屏幕坐标。找色/找图区域 (x1,y1)-(x2,y2) 越界或为空通常返回空串。
  • 相似度 sim / delta_color 取值 0~1 或 BGR 偏差:值越大越严格,建议从 0.9 起逐步调;颜色偏差并非越小越好,需兼顾画面抖动。
  • 找图建议先用 SaveRegionShot 截一小块当模板,或用 LoadPic / LoadPicRes / LoadPicMem 预加载;设置透明色可避开边框干扰。
  • 连续找色/找图可开启 SetCaptureCache 缓存画面、SetFindPicFast 快速模式以提升性能(后台 dx 模式抓图较慢时尤为明显)。