void CtestwmDlg::OnBnClickedButton1()
{
CStringA lpszFile;
m_file.GetWindowText(lpszFile);
if (lpszFile.IsEmpty())
lpszFile = GetExeDirA()+"\\element\\elementclient.exe";
LPCSTR lpDir = GetDirA(lpszFile);
LPSTR lpwParam = " game:cpw";
CStringA lpDll;
LPCSTR dll[] = {
"CEGUIBase.dll",
"DirectX81GUIRenderer.dll",
"CEGUIExpatParser.dll",
"CEGUIFalagardWRBase.dll",
"wmsdk.dll" //自己的,要最后注入,不然失败
};
STARTUPINFO si= {};
si.cb = sizeof si;
si.dwFlags = STARTF_USECOUNTCHARS;
si.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi;
CreateProcess(lpszFile,lpwParam,,,FALSE,CREATE_SUSPENDED,,lpDir,&si,&pi);
ResumeThread(pi.hThread);
for (int i = ;i < ;i++)
{
lpDll.Format("%s\\%s",GetExeDirA(),dll);
injectionDll(pi.hProcess,lpDll);
}
injectionDll 函数
void injectionDll(HANDLE hProcess,LPCSTR lpDll)
{
DWORD dwSize = strlen(lpDll) + ;
LPVOID lpBuf = VirtualAllocEx(hProcess,NULL,dwSize,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,lpBuf,LPVOID(lpDll),dwSize,NULL);
LPVOID lpFun = LoadLibraryA;
ASSERT(lpFun);
HANDLE hThread = CreateRemoteThread(hProcess,NULL,,(LPTHREAD_START_ROUTINE)lpFun,lpBuf,,);
WaitForSingleObject(hThread,INFINITE);
VirtualFreeEx(hProcess,lpBuf,dwSize,MEM_DECOMMIT);
CloseHandle(hThread);
}
}

DLL代码

#include "Main.h"
#include "Game.h"
#include "IDirect3D8.h" DWORD WINAPI ThreadProc(LPVOID lpParameter);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); typedef IDirect3D8 * (WINAPI * lpDirect3DCreate8)(UINT SDKVersion);
lpDirect3DCreate8 pDirect3DCreate8;
IDirect3D8 * WINAPI myDirect3DCreate8(UINT SDKVersion); CGame * Game;
HMODULE phModule;
MyIDirect3D8 * NewIDirect3D8; BOOL APIENTRY DllMain( HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
    )
{
    phModule = hModule;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        CreateThread(NULL,,ThreadProc,NULL,,NULL);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
} DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
    HMODULE hD3D8 = GetModuleHandle(L"d3d8.dll");     while (hD3D8 == )
    {
        Sleep();
        hD3D8 = GetModuleHandle(L"d3d8.dll");
    }     LPVOID lpFunC = GetProcAddress(hD3D8,"Direct3DCreate8");     DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)lpFunC,myDirect3DCreate8);
    DetourTransactionCommit();
    pDirect3DCreate8= (lpDirect3DCreate8)lpFunC;     return ;
} IDirect3D8 * WINAPI myDirect3DCreate8(UINT SDKVersion)
{
    static int doing;
    doing++;
    IDirect3D8 * tmp = pDirect3DCreate8(SDKVersion);
    if (doing == )    //2=窗口模式    3=全屏模式
    {
        NewIDirect3D8 = new MyIDirect3D8(tmp);
        tmp= (IDirect3D8*)NewIDirect3D8;
    }
    return tmp;
} HRESULT APIENTRY MyIDirect3D8::CreateDevice(UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice8** ppReturnedDeviceInterface)
{ HRESULT hr=lpD3D->CreateDevice(Adapter,DeviceType,hFocusWindow,BehaviorFlags,
pPresentationParameters,&lpD3DD8bak); lpD3DD8=new MyIDirect3DDevice8(lpD3DD8bak); *ppReturnedDeviceInterface = (IDirect3DDevice8*)lpD3DD8; Game=new CGame(lpD3DD8,phModule);
Game->hWnd=hFocusWindow;
Game->WndProc=(WNDPROC)SetWindowLong(hFocusWindow,GWL_WNDPROC,(LONG)&WndProc);
Game->init(); return hr;
}

我用VS2010+VC9 + GEGUI 0.62  + Detours 编译通过

Hook Directx + CEGUI VC++的更多相关文章

  1. Windows 常用运行库下载 (DirectX、VC++、.Net Framework等)

    经常听到有朋友抱怨他的电脑运行软件或者游戏时提示缺少什么 d3dx9_xx.dll 或 msvcp71.dll.msvcr71.dll又或者是 .Net Framework 初始化之类的错误而无法正常 ...

  2. vc++窗口的创建过程(MFC消息机制的经典文章)

    一.什么是窗口类  在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC ...

  3. 安装VS2015可能出现的问题以及解决方法

    1.语言包问题 在官网上下载的版本是英文版,这就需要自己再去官网上下载一个中文安装包,很快的.不过需要2G内存.官网链接如下所示 https://www.microsoft.com/zh-CN/dow ...

  4. vc中关于 directx的配置,和dxsdk_extras(directshow)

      2009-11-10 0:28 此文章:自己编写 转载于<汤姆&杰瑞> DirectShow 1 -- 下载与VC配置 1 DirectX SDK9 Directshow sd ...

  5. vc有关 directx组态,和dxsdk_extras(directshow)

      2009-11-10 0:28 此文章:自己编写 转载于<汤姆&杰瑞> DirectShow 1 -- 下载与VC配置 1 DirectX SDK9 Directshow sd ...

  6. 使用VC++通过远程进程注入来实现HOOK指定进程的某个API

    前阵子读到一篇关于<HOOK API入门之Hook自己程序的MessageBoxW>的博客,博客地址:http://blog.csdn.net/friendan/article/detai ...

  7. VC++使用HOOK API 屏蔽PrintScreen键截屏以及QQ和微信默认热键截屏

    转载:http://blog.csdn.net/easysec/article/details/8833457 转载:http://www.vckbase.com/module/articleCont ...

  8. VC/MFC 编程技巧大总结

    1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐 ...

  9. CEGUI 0.7.7 VS2010+SP3 编译过程

    1 在官方网站http://www.cegui.org.uk/ 下载最新的CEGUI 源代码 版本是0.7.7 2 下载编译需要用到的依赖文件包 将解压后的文件夹 Dependencies 和CEGU ...

随机推荐

  1. OneNET麒麟座应用开发之四:数据上传测试

    已经测试过OneNET麒麟座开发板了,这次来尝试与OneNET的连接和数据上传.这也是我们测试这块开发办的主要原因,因为在十几种我们有这种将分散的采集点数据上传到后台的需求. 先看看麒麟座这块开发板, ...

  2. 欧拉函数,打表求欧拉函数poj3090

    欧拉函数 φ(n) 定义:[1,N]中与N互质的数的个数 //互质与欧拉函数 /* 求欧拉函数 按欧拉函数计算公式,只要分解质因数即可 */ int phi(int n){ int ans=n; ;i ...

  3. python+selenium九:ddt数据驱动

    第一种,测试数据放在Excel里面 test_Login: import unittestimport timeimport ddtimport osfrom selenium import webd ...

  4. python+selenium八:Alert弹窗

    此弹窗是浏览器自带的弹窗,不是html中的元素 from selenium import webdriverfrom selenium.webdriver.common.action_chains i ...

  5. python 全栈开发,Day69(Django的视图层,Django的模板层)

    昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...

  6. java 知识体系

    java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以java并不是单机版的,只是面向对象语言.建议如果学习java体系的话可以这样去学习: *第一阶段:J ...

  7. Oracle11g 创建数据库中问题处理(必须运行Netca以配置监听程序)

    这两天学习<OCP/OCA认证考试指南>,要创建新的数据库,因为此前我的电脑上已经被折腾了好久的Mysql 和oracle10g ,所以可能导致很多环境都变了,创建数据库的过程中出现了一些 ...

  8. java12小时制的时间转换为24小时制

    Java中将12小时制的时间转换为24小时制的方式如下: import java.text.SimpleDateFormat; import java.util.Date; public class ...

  9. JQuery操作元素的属性与样式及位置

    <script type="text/javascript" src="JQuery/jquery-1.5.1.js"></script> ...

  10. (转)python中调用R语言通过rpy2 进行交互安装配置详解

    python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753   python中调用R语言通过r ...