插件开发手册

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

移动/缩放窗口到指定位置和大小 - MoveWindow

接口 ID 23 | 分类:窗口操作 | 定义文件:x64GamePlug.idl

作用说明

移动/缩放窗口到指定位置和大小(w或h传0表示不改变该方向尺寸),成功返回1失败返回0

参数说明
参数名方向类型说明
hwnd[in]hyper目标窗口句柄(64 位 hyper)。可用 FindWindow / GetWindowByPid / EnumTopWindow 取得;句柄无效时多数方法返回空值或 0
x[in]LONG横坐标(像素)。位置类方法为屏幕坐标,绑定/图色类方法为客户区坐标
y[in]LONG纵坐标(像素),含义同 x
w[in]LONG宽度(像素);传 0 表示不改变该方向尺寸
h[in]LONG高度(像素);传 0 表示不改变该方向尺寸
VC++ 控制台调用示例(可直接编译运行)
// ============ VC++ 控制台调用示例:MoveWindow ============





// 【怎么用】整段复制本代码,覆盖新建控制台工程的 main.cpp,直接生成并运行。





//   1. VS2019 新建「控制台应用」,解决方案平台务必选 x64(插件是 64 位 DLL)。





//   2. 项目属性 -> C/C++ -> 预编译头 -> 设为「不使用预编译头」,





//      否则新建工程默认带 pch.h,覆盖 main.cpp 后会报 C1010。





//   3. 把 x64Game-Plug.dll 放到工程目录(#import 编译期要读它的类型库),





//      再复制一份到生成的 exe 所在目录(运行期 LoadLibrary 要加载它)。





//   4. 源码保存为 UTF-8 带 BOM(或 ANSI/GBK),中文字符串才不会乱码。





//   全程不用 regsvr32 注册插件,也不用管理员权限。





//





#include <iostream>





#include <clocale>





#include <windows.h>





#include <comdef.h>                 // _bstr_t / _com_error











// ---------- 引用插件类型库:编译期生成 IGamePlugPtr 智能指针包装 ----------





// rename 是为了避开 windows.h 里 FindWindow 宏与接口同名方法的冲突:





// 接口方法 FindWindow 在 C++ 侧改名为 FindWindowGP(见上方 #import)。





#import "x64Game-Plug.dll" no_namespace rename("FindWindow", "FindWindowGP")











static HMODULE      g_hDll = NULL;





static IGamePlugPtr g_plug;











// ---------- 免注册加载插件(不用 regsvr32) ----------





static bool LoadPlug()





{





    // 依次试 exe 同目录 / 上级目录,兼容 VS 默认输出结构





    const wchar_t* paths[] = {





        L"x64Game-Plug.dll",





        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* FnCreate)(void**);





    FnCreate fn = (FnCreate)::GetProcAddress(g_hDll, "GamePlugCreate");





    if (!fn)





    {





        std::cout << "GetProcAddress(GamePlugCreate) failed" << std::endl;





        return false;





    }











    void* p = NULL;





    if (FAILED(fn(&p)) || !p)





    {





        std::cout << "GamePlugCreate failed" << std::endl;





        return false;





    }





    g_plug = IGamePlugPtr((IGamePlug*)p, false);  // 对象已带引用,false = 不额外 AddRef





    return true;





}

















int main()





{





    setlocale(LC_ALL, "");              // 控制台按系统代码页显示中文





    if (!LoadPlug()) { std::cin.get(); return 1; }











    // 【可选】收费命令需先设置授权码(换成你自己的码);免费命令可跳过





    // g_plug->SetUsername(_bstr_t(L"U12-XXXXXXXXXXXX"));











    // ---------- 调用插件本命令方法如下 ----------





    // 【1】准备输入参数(按实际情况修改)





    // hwnd  [in] hyper : 目标窗口句柄(64 位 hyper)。可用 FindWindow / GetWindowByPid / EnumTopWindow 取得;句柄无效时多数方法返回空值或 0





    hyper hwnd = (hyper)::FindWindowW(NULL, L"窗口标题");





    // x  [in] LONG : 横坐标(像素)。位置类方法为屏幕坐标,绑定/图色类方法为客户区坐标





    LONG x = 100;





    // y  [in] LONG : 纵坐标(像素),含义同 x





    LONG y = 100;





    // w  [in] LONG : 宽度(像素);传 0 表示不改变该方向尺寸





    LONG w = 800;





    // h  [in] LONG : 高度(像素);传 0 表示不改变该方向尺寸





    LONG h = 600;











    // 【2】调用插件方法





    // 返回值 ok  VARIANT_BOOL* : 输出执行结果:成功为 VARIANT_TRUE(1),失败或句柄无效为 VARIANT_FALSE(0)





    try





    {





        VARIANT_BOOL ok = g_plug->MoveWindow(hwnd, x, y, w, h);





        std::cout << "ok = " << (ok != VARIANT_FALSE ? "TRUE(1)" : "FALSE(0)") << std::endl;





    }





    catch (const _com_error& e)





    {





        std::cout << "调用失败 HRESULT = 0x" << std::hex





                  << (unsigned long)e.Error() << std::dec << std::endl;





    }











    // ---------- 程序退出前释放 ----------





    g_plug.Release();





    if (g_hDll) ::FreeLibrary(g_hDll);





    std::cout << "Press Enter to exit...";





    std::cin.get();





    return 0;





}
返回值

类型 VARIANT_BOOL(ok)。输出执行结果:成功为 VARIANT_TRUE(1),失败或句柄无效为 VARIANT_FALSE(0)