2010-07-16 9 views
10

Je souhaite que mon programme puisse lancer n'importe quel jeu Windows et, pendant que l'utilisateur le joue, affiche par intermittence du texte ou des images dans une partie de la fenêtre de jeu. Le jeu peut être en mode fenêtré ou plein écran. De ce que j'ai pu comprendre à partir des ressources en ligne, cela pourrait être fait en utilisant une bibliothèque graphique qui supporte les superpositions et en utilisant Windows Hooks pour garder une trace de la fenêtre de l'application cible. Dans ce contexte, j'ai quelques questions.Comment superposer des graphiques sur des jeux Windows?

  1. Les superpositions affecteront-elles les performances du jeu?
  2. Comment l'accrochage de l'application affectera-t-il les performances?
  3. Y a-t-il un autre moyen d'y parvenir? Par exemple, comment fonctionne le PIX, l'outil de débogage et d'analyse DirectX?

Répondre

12

Fraps est l'exemple archétypal de faire ce genre de chose à une application DirectX en plein écran à partir d'une application tierce. Il fonctionne en accroissant certains appels système et en s'insérant dans la chaîne d'appel entre une application et DirectX. Il y a un peu de performance, mais en général c'est minime.

This page semble avoir quelques détails et un exemple de code sur la façon de brancher l'application de cette façon. Si je me souviens bien, d'autres forums de discussions (ne peut pas trouver le lien pour le moment, rechercher des choses comme "comment fonctionne fraps", c'est une question populaire), Fraps accroche quelques éléments pour forcer l'application pour charger sa DLL, puis croches appels Present() et exécute un appel device-> Clear() avant d'appeler le réel Present(), avec une liste de petits rectangles pour définir une couleur différente, qui peut épeler le numéro FPS qui il affiche. Cela a un impact minime sur les performances et est largement compatible avec le rendu de l'application. Superposer un bitmap serait plus compliqué car ce ne serait pas aussi facile à faire au moment présent. Peut-être que si vous pouviez accrocher EndScene, alors vous pourriez faire plus, mais vous devriez faire attention à ne pas changer l'état de l'appareil. PIX a un accès privilégié au pilote DirectX, donc je ne m'attendrais pas à pouvoir l'utiliser comme un modèle à émuler.

Si une application cible est exécutée en mode fenêtré, l'accrochage de DirectX fonctionne toujours, mais vous pouvez également simplement utiliser GDI à la place.

Editer: Je pense que est le lien auquel je pensais à l'origine.

Questions connexes