切换桌面主显示器的分辨率,成功返回 1。只改宽高,刷新率和色深沿用当前值。常用于全屏游戏切换分辨率。无参数外的其它要求。
| 参数名 | 方向 | 类型 | 说明 |
|---|---|---|---|
w | [in] | long(32 位整数) | 要设置的分辨率宽度,如 1920。 |
h | [in] | long(32 位整数) | 要设置的分辨率高度,如 1080。 |
// 说明:本示例为完整 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;
}
int main() {
if (!LoadPlug()) { system("pause"); return 1; }
// ---------- 调用插件本命令方法如下 ----------
try {
VARIANT_BOOL ok = g_plug->SetScreenSize(1920, 1080);
std::cout << "切换结果(1=成功): " << (ok ? 1 : 0) << std::endl;
} catch (_com_error& e) {
std::wcout << L"COM error: " << e.ErrorMessage() << std::endl;
}
g_plug->Release();
system("pause");
return 0;
}
类型 bool(VARIANT_BOOL,1/0)。1 = 切换成功;0 = 切换失败(分辨率非法或系统不支持)。
1)只改主显示器分辨率,刷新率/色深沿用当前值。2)传入显示器不支持的分辨率会返回 0。3)常用于全屏游戏切换,脚本结束前建议再调用一次切回原分辨率,避免桌面长期停留在非常规分辨率。4)本功能为免费功能,无需授权码。