zoukankan      html  css  js  c++  java
  • [MetaHook] GameUI hook

    Hook GameUI function.

      1 #include <metahook.h>
      2 
      3 #include <IGameUI.h>
      4 
      5 IGameUI *g_pGameUI = 0;
      6 
      7 void (__fastcall *g_pfnCGameUI_Initialize)(void *pthis, int edx, CreateInterfaceFn *factories, int count) = 0;
      8 void (__fastcall *g_pfnCGameUI_Start)(void *pthis, int edx, struct cl_enginefuncs_s *engineFuncs, int interfaceVersion, void *system) = 0;
      9 void (__fastcall *g_pfnCGameUI_Shutdown)(void *pthis, int edx) = 0;
     10 int (__fastcall *g_pfnCGameUI_ActivateGameUI)(void *pthis, int edx) = 0;
     11 int (__fastcall *g_pfnCGameUI_ActivateDemoUI)(void *pthis, int edx) = 0;
     12 int (__fastcall *g_pfnCGameUI_HasExclusiveInput)(void *pthis, int edx) = 0;
     13 void (__fastcall *g_pfnCGameUI_RunFrame)(void *pthis, int edx) = 0;
     14 void (__fastcall *g_pfnCGameUI_ConnectToServer)(void *pthis, int edx, const char *game, int IP, int port) = 0;
     15 void (__fastcall *g_pfnCGameUI_DisconnectFromServer)(void *pthis, int edx) = 0;
     16 void (__fastcall *g_pfnCGameUI_HideGameUI)(void *pthis, int edx) = 0;
     17 bool (__fastcall *g_pfnCGameUI_IsGameUIActive)(void *pthis, int edx) = 0;
     18 void (__fastcall *g_pfnCGameUI_LoadingStarted)(void *pthis, int edx, const char *resourceType, const char *resourceName) = 0;
     19 void (__fastcall *g_pfnCGameUI_LoadingFinished)(void *pthis, int edx, const char *resourceType, const char *resourceName) = 0;
     20 void (__fastcall *g_pfnCGameUI_StartProgressBar)(void *pthis, int edx, const char *progressType, int progressSteps) = 0;
     21 int (__fastcall *g_pfnCGameUI_ContinueProgressBar)(void *pthis, int edx, int progressPoint, float progressFraction) = 0;
     22 void (__fastcall *g_pfnCGameUI_StopProgressBar)(void *pthis, int edx, bool bError, const char *failureReason, const char *extendedReason) = 0;
     23 int (__fastcall *g_pfnCGameUI_SetProgressBarStatusText)(void *pthis, int edx, const char *statusText) = 0;
     24 void (__fastcall *g_pfnCGameUI_SetSecondaryProgressBar)(void *pthis, int edx, float progress) = 0;
     25 void (__fastcall *g_pfnCGameUI_SetSecondaryProgressBarText)(void *pthis, int edx, const char *statusText) = 0;
     26 
     27 class CGameUI : public IGameUI
     28 {
     29 public:
     30     void Initialize(CreateInterfaceFn *factories, int count);
     31     void Start(struct cl_enginefuncs_s *engineFuncs, int interfaceVersion, void *system);
     32     void Shutdown(void);
     33     int ActivateGameUI(void);
     34     int ActivateDemoUI(void);
     35     int HasExclusiveInput(void);
     36     void RunFrame(void);
     37     void ConnectToServer(const char *game, int IP, int port);
     38     void DisconnectFromServer(void);
     39     void HideGameUI(void);
     40     bool IsGameUIActive(void);
     41     void LoadingStarted(const char *resourceType, const char *resourceName);
     42     void LoadingFinished(const char *resourceType, const char *resourceName);
     43     void StartProgressBar(const char *progressType, int progressSteps);
     44     int ContinueProgressBar(int progressPoint, float progressFraction);
     45     void StopProgressBar(bool bError, const char *failureReason, const char *extendedReason = NULL);
     46     int SetProgressBarStatusText(const char *statusText);
     47     void SetSecondaryProgressBar(float progress);
     48     void SetSecondaryProgressBarText(const char *statusText);
     49 };
     50 
     51 void CGameUI::Initialize(CreateInterfaceFn *factories, int count)
     52 {
     53     return g_pfnCGameUI_Initialize(this, 0, factories, count);
     54 }
     55 
     56 void CGameUI::Start(struct cl_enginefuncs_s *engineFuncs, int interfaceVersion, void *system)
     57 {
     58     return g_pfnCGameUI_Start(this, 0, engineFuncs, interfaceVersion, system);
     59 }
     60 
     61 void CGameUI::Shutdown(void)
     62 {
     63     return g_pfnCGameUI_Shutdown(this, 0);
     64 }
     65 
     66 int CGameUI::ActivateGameUI(void)
     67 {
     68     return g_pfnCGameUI_ActivateGameUI(this, 0);
     69 }
     70 
     71 int CGameUI::ActivateDemoUI(void)
     72 {
     73     return g_pfnCGameUI_ActivateDemoUI(this, 0);
     74 }
     75 
     76 int CGameUI::HasExclusiveInput(void)
     77 {
     78     return g_pfnCGameUI_HasExclusiveInput(this, 0);
     79 }
     80 
     81 void CGameUI::RunFrame(void)
     82 {
     83     return g_pfnCGameUI_RunFrame(this, 0);
     84 }
     85 
     86 void CGameUI::ConnectToServer(const char *game, int IP, int port)
     87 {
     88     return g_pfnCGameUI_ConnectToServer(this, 0, game, IP, port);
     89 }
     90 
     91 void CGameUI::DisconnectFromServer(void)
     92 {
     93     return g_pfnCGameUI_DisconnectFromServer(this, 0);
     94 }
     95 
     96 void CGameUI::HideGameUI(void)
     97 {
     98     return g_pfnCGameUI_HideGameUI(this, 0);
     99 }
    100 
    101 bool CGameUI::IsGameUIActive(void)
    102 {
    103     return g_pfnCGameUI_IsGameUIActive(this, 0);
    104 }
    105 
    106 void CGameUI::LoadingStarted(const char *resourceType, const char *resourceName)
    107 {
    108     return g_pfnCGameUI_LoadingStarted(this, 0, resourceType, resourceName);
    109 }
    110 
    111 void CGameUI::LoadingFinished(const char *resourceType, const char *resourceName)
    112 {
    113     return g_pfnCGameUI_LoadingFinished(this, 0, resourceType, resourceName);
    114 }
    115 
    116 void CGameUI::StartProgressBar(const char *progressType, int progressSteps)
    117 {
    118     return g_pfnCGameUI_StartProgressBar(this, 0, progressType, progressSteps);
    119 }
    120 
    121 int CGameUI::ContinueProgressBar(int progressPoint, float progressFraction)
    122 {
    123     return g_pfnCGameUI_ContinueProgressBar(this, 0, progressPoint, progressFraction);
    124 }
    125 
    126 void CGameUI::StopProgressBar(bool bError, const char *failureReason, const char *extendedReason)
    127 {
    128     return g_pfnCGameUI_StopProgressBar(this, 0, bError, failureReason, extendedReason);
    129 }
    130 
    131 int CGameUI::SetProgressBarStatusText(const char *statusText)
    132 {
    133     return g_pfnCGameUI_SetProgressBarStatusText(this, 0, statusText);
    134 }
    135 
    136 void CGameUI::SetSecondaryProgressBar(float progress)
    137 {
    138     return g_pfnCGameUI_SetSecondaryProgressBar(this, 0, progress);
    139 }
    140 
    141 void CGameUI::SetSecondaryProgressBarText(const char *statusText)
    142 {
    143     return g_pfnCGameUI_SetSecondaryProgressBarText(this, 0, statusText);
    144 }
    145 
    146 void GameUI_InstallHook(void)
    147 {
    148     CreateInterfaceFn GameUICreateInterface = Sys_GetFactory((HINTERFACEMODULE)GetModuleHandleA("GameUI.dll"));
    149     g_pGameUI = (IGameUI *)GameUICreateInterface(GAMEUI_INTERFACE_VERSION, 0);
    150 
    151     CGameUI GameUI;
    152     DWORD *pVFTable = *(DWORD **)&GameUI;
    153 
    154     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  1, (void *)pVFTable[ 1], (void *&)g_pfnCGameUI_Initialize);
    155     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  2, (void *)pVFTable[ 2], (void *&)g_pfnCGameUI_Start);
    156     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  3, (void *)pVFTable[ 3], (void *&)g_pfnCGameUI_Shutdown);
    157     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  4, (void *)pVFTable[ 4], (void *&)g_pfnCGameUI_ActivateGameUI);
    158     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  5, (void *)pVFTable[ 5], (void *&)g_pfnCGameUI_ActivateDemoUI);
    159     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  6, (void *)pVFTable[ 6], (void *&)g_pfnCGameUI_HasExclusiveInput);
    160     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  7, (void *)pVFTable[ 7], (void *&)g_pfnCGameUI_RunFrame);
    161     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  8, (void *)pVFTable[ 8], (void *&)g_pfnCGameUI_ConnectToServer);
    162     g_pMetaHookAPI->VFTHook(g_pGameUI, 0,  9, (void *)pVFTable[ 9], (void *&)g_pfnCGameUI_DisconnectFromServer);
    163     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 10, (void *)pVFTable[10], (void *&)g_pfnCGameUI_HideGameUI);
    164     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 11, (void *)pVFTable[11], (void *&)g_pfnCGameUI_IsGameUIActive);
    165     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 12, (void *)pVFTable[12], (void *&)g_pfnCGameUI_LoadingStarted);
    166     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 13, (void *)pVFTable[13], (void *&)g_pfnCGameUI_LoadingFinished);
    167     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 14, (void *)pVFTable[14], (void *&)g_pfnCGameUI_StartProgressBar);
    168     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 15, (void *)pVFTable[15], (void *&)g_pfnCGameUI_ContinueProgressBar);
    169     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 16, (void *)pVFTable[16], (void *&)g_pfnCGameUI_StopProgressBar);
    170     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 17, (void *)pVFTable[17], (void *&)g_pfnCGameUI_SetProgressBarStatusText);
    171     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 18, (void *)pVFTable[18], (void *&)g_pfnCGameUI_SetSecondaryProgressBar);
    172     g_pMetaHookAPI->VFTHook(g_pGameUI, 0, 19, (void *)pVFTable[19], (void *&)g_pfnCGameUI_SetSecondaryProgressBarText);
    173 }
  • 相关阅读:
    js-禁止微信H5页面点击右上角菜单时出现“复制链接”,且分享仅支持微信分享
    js-获取用户移动端网络类型:wifi、4g、3g、2g...
    小程序-云开发部署流程(步骤二)
    小程序-(报错)请使用 2.2.3 或以上的基础库以使用云能力(步骤一)
    解决iOS10的Safari下Meta设置user-scalable=no无效的方法
    领域驱动, 事件驱动,测试驱动
    spring web项目中整合netty, akka
    why rpc
    nginx配置https证书
    org.apache.http.NoHttpResponseException
  • 原文地址:https://www.cnblogs.com/crsky/p/4741925.html
Copyright © 2011-2022 走看看