OpenGL/DirectX Crochet - Similaire à FRAPS
Est-il possible de détecter quelles sont les applications utilisant OpenGL ou DirectX similaire à ce que FRAPS? (Éventuellement en utilisant une certaine forme de crochet)? Je n'aurai probablement pas besoin de tirer à la fenêtre, j'ai juste besoin de savoir quels sont les processus, une certaine forme de rendu 3D pour le moment.
(Edit:)
Dans le cas où vous n'êtes pas familier avec elle, FRAPS est un programme qui peut être utilisé pour dessiner une "images par seconde" compteur sur une application 3D. FRAPS trouve toutes les applications 3D par lui-même sans avoir besoin de vous pour spécifier le nom du processus.
Exemple des "images Par seconde" contre attirés externes du jeu:
Vous pouvez prendre un coup d'oeil à taksi.sourceforge.net. C'est un opensource alternative à FRAPS. La plus grande chose est, vous pourriez regarder dans les sources et de trouver ce dont vous avez besoin.
Être prudent que pas toutes les applications qui utilisent DirectX/Direct3d sont en train de faire du rendu 3D. Nous utilisons D3D pour le rendu de H. 264 vidéo.
Je pense que cela peut être utile pour dx ... Accrochage DirectX EndScene de l'injection d'une DLL
Merci pour l'avertissement Deanna, autre chose à regarder dehors pour.
OriginalL'auteur David | 2012-08-04
Vous devez vous connecter pour publier un commentaire.
Probablement le moyen le plus simple est de vérifier la présence de l'OpenGL et DirectX bibliothèques de base, sans doute aussi une bonne idée d'ajouter dans le pilote OGL dll en trop (comme nvogl), ce qui peut être fait via
EnumProcesses
&EnumProcessModulesEx
, à l'aide de p/invoke, cela permettra au moins de vous donner un départ du processus, éventuellement à l'aide OGL ou DX.Bien sûr, certaines applications se chargent à la fois de l'API et de l'utilisation d'un seul, ou seulement sous certaines conditions d'utilisation
l'un des GFX de l'API (même si ce dernier se produit uniquement avec des outils spécialisés et autres), pour cela, de l'OMI, la meilleure façon de le vérifier est de réaliser une certaine forme d'injection
ou de l'attacher au processus comme un débogueur serait, alors accrochage soit
Present
DX ouwglSwapBuffers
pour OGL.Vous pourriez être sur de s'en sortir sans l'aide d'un crochet par l'énumération de la GDI poignées et à la recherche pour le DXGI ou OGL rendre contextes, comment viable, c'est, je ne sais pas.
il y a un 32 & variante 64 bits disponible(
EnumProcessModulesEx
), vous aurez besoin d'une application 64 bits pour obtenir à la fois 32 bits et 64 bits des processus cependant (voir remarques), et vous aurez toujours besoin d'un 32bit construire pour les 32 bits des Systèmes d'exploitation.OriginalL'auteur Necrolis
De ce que je comprends, FRAPS utilise relativement approche par force brute pour déterminer où placer en bas de la boutique. Le processus a débuté avec SetWindowsHookEx pour demander que le chargement du système d'exploitation de la FRAPS hook DLL dans tous les processus en cours d'exécution, il peut [et de processus]. La magie dans la DLL se résume à l'exécution d'une procédure série de tests à l'aide de GetModuleHandleA observer si le processus, il est attaché a chargé aucune OpenGL/DirectX modules. Si tous les appels de retourner la valeur NULL, le crochet tente de se retirer du processus.
D'autre part, si le processus a charger, il suffit simplement de crochets appropriés fonction de rendu à partir de la bibliothèque en supprimant la protection et l'injection d'un JMP crochet. wglSwapBuffers est généralement la seule pertinente en OpenGL. Lorsque le processus des appels cette fonction, il finit par appeler la FRAPS module, puis FRAPS capture le tampon d'arrière-plan dans sa file d'attente pour l'encodage en AVI et rend son peu d'indication. Puis il traite de l'original de la demande de wglSwapBuffers et renvoie l'exécution revenir au programme.
Aussi loin que l'interrogation en C#... EasyHook (http://easyhook.codeplex.com/) et voyez si cela ne fonctionne pas pour vous. Personnellement, je n'ai aucune expérience avec cette API.
OriginalL'auteur dans3itz
Vous devriez jeter un oeil à Comment la superposition de graphiques sur les jeux Windows? et l'article lié http://www.ring3circus.com/gameprogramming/case-study-fraps/.
Le second lien est un concept de code qui devrait faire le crochet de la partie. Il va également dans certains plus de détails sur le comment et le pourquoi que j'ai envie de copier et coller dans cette réponse.
OriginalL'auteur NtscCobalt