EDIT : I'm using ID3DXFont just so you know.

I have a menu and it works fine, for about 60 seconds... the text disappears/box disappears/crosshair disappears.

I'm thinking of a few ways to do this. They don't work too well because it takes about 10 seconds to re-hook which is inconvenient.

Here are the ways I've done so far :

1. Have a reporter variable(boolean) that sets it to true at the end of the hook func and then in an infinite loop in a thread it sets it to false and sets a timer variable to zero and the reporter variable to false again. If the reported variable is false in the infinite loop, the timer variable is set up one. After the timer variable is 100, it re-hooks because endscene wasn't drawing. The only problem is going ingame, it freezes when you hit start and endscene is frozen or something like that, then when it re-hooks the game ends. Here is what it looks like in code form:
Code:
//endscene func :
...{

//Drawing stuff here

report = true;
}

//Thread

...{

//Key checking in here

if(report){
    timer = 0;
    report = false;
} else {
    timer++;
    if(timer > 100){//This is the same thing I use at the start to hook without he RemoveDetour part
        RemoveDetour((PBYTE)myEndScene, (PBYTE)endscene);
        //Get endscene here
        oEndScene = (tEndScene)(DetourFunction((PBYTE)endscene, (PBYTE)myEndScene, 5));
        timer = 0;
    }
}

Sleep(10);

}
2 : Use the return value of DrawText() (it returns the height of the drawn text if it succeeds and returns 0 if it fails) to check if it fails at drawing. Once again, it fails when I go ingame because it isn't drawing.

3 : Re-hook :
Code:
if(GetModuleHandle("d3d9.dll") != NULL){
    //Hook stuffs
}
The problem with this ? No problem when going ingame
Sadly, it doesn't re-hook when the text disappears out/ingame because ES is drawing.

Anybody know how to get around this ? The ingame part is really annoying... (I will put your name in the credits if you can help me out)