删除已挂钩的应用程序中已创建的DrawTextA

时间:2011-11-16 18:37:15

标签: c++ dll hook direct3d

我一直在研究一个游戏的DLL钩子,允许修改游戏内存中的一些东西,以增加我在钩住和修改内存等方面的知识。我已经到了一个我无法弄清楚的地步怎么继续!

我创建了一种字体并使用以下方法将其显示在屏幕上。

LPD3DXFONT      g_pFont = NULL;

HRESULT WINAPI hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    if(g_pFont == NULL){
        D3DXCreateFontA(pDevice, 12, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Verdana", &g_pFont);
    }
    if(g_pFont != NULL)
    {
        RECT rect = { 10, 10, 500,200 };
        g_pFont->DrawTextA(NULL, "Text to draw to screen", -1, &rect, 0,tGreen);
    }
    return oEndScene(pDevice);
}

现在我需要弄清楚的是我如何从屏幕上删除DrawTextA,或者将其文本更改为其他内容。我完全不知道怎么做!

非常感谢任何帮助,谢谢大家!

1 个答案:

答案 0 :(得分:0)

好吧,看起来我不太明白EndScene是如何工作的!看起来它是在每一帧结束时绘制的,我只需要做一个if语句就可以让它消失!

    if(g_pFont != NULL)
{
    //RECT struct - left,top,right,bottom in pixels
    if(g_timer < 2000){ 
    RECT rect = { 10, 10, 500,200 };
    g_pFont->DrawTextA(NULL, "Draw this and remove this", -1, &rect, 0,tGreen);
    }
}

g_timer在hkDrawIndexedPrimitive线程内设置为++。