区域找图(GDI+,支持 bmp/jpg/png)。pic_name 支持多图 \"a.bmp|b.bmp\" 按顺序尝试;delta_color 每通道允许偏差(BGR 六位,如 202020);sim 匹配像素比例 0.1~1.0;dir 同 FindColor。命中返回 \"序号,x,y\"(序号=第几张图,从 0 起),没找到返回空串。图片路径为相对路径时按插件进程当前目录解析
| 参数名 | 方向 | 类型 | 说明 |
|---|---|---|---|
x1 | [in] | long | 查找/截取区域左上角横坐标(客户区坐标,未绑定窗口时为屏幕坐标) |
y1 | [in] | long | 查找/截取区域左上角纵坐标 |
x2 | [in] | long | 查找/截取区域右下角横坐标 |
y2 | [in] | long | 查找/截取区域右下角纵坐标 |
pic_name | [in] | string (BSTR) | 模板图名字:LoadPic 时自定义的名字,之后 FindPic 用此名引用;也可直接传磁盘相对/绝对路径,多图用 "a.bmp|b.bmp" 分隔按顺序尝试 |
delta_color | [in] | string (BSTR) | 找图每通道允许偏差(BGR 六位,如 202020) |
sim | [in] | double | 相似度 0~1(1=完全一致):颜色/图片允许的最大差异,越大越严格 |
dir | [in] | long | 查找方向:0=左上(默认,自左上向右下扫描) 1=左下 2=右上 3=右下 4=中心向外(取离区域中心最近的命中点) |
// 说明:本示例为完整 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 pic_name = L"sample";
_bstr_t delta_color = L"sample";
double sim = 0.9;
long dir = 0;
_bstr_t s = g_plug->FindPic(x1, y1, x2, y2, pic_name, delta_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」(序号=第几张图,从 0 起);未找到返回空串。