2016-09-08 4 views
0

Je travaille sur une application de capture d'écran pour les jeux DirectX en plein écran. Mais il y a un problème - pour chaque version de DirectX, il y a un moyen de faire une capture d'écran (pour autant que je sache).Superposition d'injection Dll Version DirectX

Donc la question est de savoir comment déterminer la version DirectX de l'application que j'injecte avec ma DLL à partir de cette DLL?

+0

directx ne gère pas les captures d'écran, le jeu en fait. Donc, oui, c'est différent par jeu quelle touche ils utilisent –

+0

En plus du commentaire @GillBates, après l'injection de votre dll, vous devrez invoquer un thread distant, entrer en compétition avec les autres threads de processus, scanner la mémoire de processus pour les ressources transitoires et tenter pour déchiffrer correctement le contexte de l'appareil. Ne vous méprenez pas, vous allez planter le programme cible la plupart du temps. – Jeff

+0

Vous serez également probablement considéré comme un malware suspecté par des logiciels de sécurité et des programmes anti-triche/anti-piratage. Je ne comprends pas pourquoi il y a tant de gens qui écrivent encore et encore la même chose, ce qui a déjà été fait avec beaucoup de succès par FRAPS et al. De plus, la plupart des jeux DirectX supportent aujourd'hui le 'faux plein écran' qui est une fenêtre sans bordure et le snip standard fonctionne. –

Répondre

0

Une astuce simple pour déterminer la version DirectX réelle dans mes hooks DirectX est d'appeler GetModuleHandle pour chacune des DLL dll. Par exemple:

HINSTANCE hD3D11 = GetModuleHandle(TEXT("D3D11.DLL")); 
if (hD3D11) 
{ 
    // DirectX 11 dll is loaded, so we can hook D3D11CreateDeviceAndSwapChain and/or D3D11CreateDevice 
} 

Et identique ou similaire pour D3D10.dll et D3D9.dll. Je pense que la meilleure façon est d'essayer GetModuleHandle dans l'ordre suivant: d3d11.dll, d3d10.dll et d3d9.dll. Cette approche fonctionne bien pour les hooks DX que j'ai créés. J'espère que cela fonctionnera pour vous aussi, ou que vous devrez l'adapter à vos besoins. Bien sûr, vous devez d'abord injecter le code ci-dessus qui vérifie la version DX et ensuite décider quelle DLL DXhook injecter en fonction de la version.

+0

Yeh, je suis venu à cette décision quelques jours avant. En tout cas merci. Vous a marqué comme réponse. – IGR94