Es posible detectar qué aplicaciones están usando OpenGL o DirectX similar a lo que FRAPS no? (Posiblemente el uso de alguna forma de gancho)? Yo probablemente no necesitará llamar a la ventana, sólo necesito saber qué procesos se están haciendo algún tipo de representación 3D por el momento.

(Edit:)
En caso de que usted no está familiarizado con él, FRAPS es un programa que puede ser utilizado para dibujar un «Fotogramas por segundo» contador en una aplicación 3D. FRAPS encuentra todas las aplicaciones 3D por sí mismo sin necesidad de especificar el nombre del proceso.

Ejemplo de «Fotogramas Por segundo» contador de dibujado a juego externos:
OpenGL/DirectX Gancho - Similar a la de FRAPS

Mi conjetura es que la función que usted está buscando se encuentra en algún lugar oculto en Microsoft Windows Api. Me gustaría buscar la solución.
Usted puede tomar un vistazo a taksi.sourceforge.net. Es un sistema alternativo a FRAPS. Lo más importante es que usted puede buscar en las fuentes y encontrar lo que necesita.
Tenga cuidado de que no todas las aplicaciones que utilicen DirectX/Direct3d están haciendo de renderizado 3D. Utilizamos D3D para la representación de H. 264 de vídeo.
Creo que esto puede ser útil para dx … Enlazar DirectX EndScene de una inyección de DLL
Gracias por la advertencia Deanna, algo más que mirar hacia fuera para.

OriginalEl autor David | 2012-08-04

3 Comentarios

  1. 8

    Probablemente la forma más sencilla es para comprobar la presencia de la OpenGL y DirectX bibliotecas del núcleo, probablemente, también una buena idea para agregar en el controlador de OGL dll en demasiado (como nvogl), esto puede ser realizado a través de EnumProcesses & EnumProcessModulesEx, con p/invoke, esto le dará al menos un punto de partida conjunto de procesos, posiblemente, el uso de OGL o DX.

    Por supuesto, algunas de las aplicaciones de carga tanto de la API y el uso de sólo uno, o sólo condicionalmente uso
    uno de los GFX API (a pesar de que éste sólo se produce con herramientas especializadas y similares), para esto, la OMI, la mejor forma de comprobarlo es realizar algún tipo de inyección
    o adjuntar al proceso como un depurador podría, luego de enganchar, ya sea Present para DX o wglSwapBuffers para OGL.

    Usted podría estar a punto de salirse con la no utilización de un gancho por la enumeración de los GDI trata y buscando la DXGI o OGL representar contextos, que tan viable es esto, no sé.

    De MSDN: «Si se llama a esta función desde una aplicación de 32 bits que se ejecuta en WOW64, sólo puede enumerar los módulos de un proceso de 32 bits. Si el proceso es un proceso de 64 bits, esta función no funcionará y el último código de error es ERROR_PARTIAL_COPY (299).» Este no estaba en la pregunta, pero necesito algo que funciona tanto en 32 y 64 bits. ¿Y si el proceso es de 64 bits? ¿Significa esto que si puedo compilar la aplicación para 64 bits se debe trabajar con 32/64? O sólo a los que si son de 32 bits no se puede enumerar 64 bits apps?
    hay un 32 & 64 bits disponible(EnumProcessModulesEx), necesitará una aplicación de 64 bits para obtener tanto de 32 como de 64 bits procesos sin embargo (ver observaciones), y todavía necesitará un 32bit construir para sistemas operativos de 32 bits.

    OriginalEl autor Necrolis

  2. 6

    De lo que yo entiendo, FRAPS utiliza un relativamente acercamiento de fuerza bruta para determinar dónde poner la tienda. El proceso se inicia con SetWindowsHookEx para solicitar que el sistema operativo carga el FRAPS gancho de DLL en cada proceso en ejecución puede [y futuro de los procesos de]. La magia en el archivo DLL se viene abajo a la ejecución de un procedimiento conjunto de pruebas utilizando GetModuleHandleA observar si el proceso está conectado a la que se ha cargado OpenGL/DirectX módulos. Si todas las llamadas de retorno NULO, el gancho intenta quitar a sí mismo en el proceso.

    Por otro lado, si el proceso ha cargado ellos, simplemente los ganchos de la representación adecuada de la función de la biblioteca mediante la eliminación de la protección y de la inyección de un JMP gancho. wglSwapBuffers es generalmente la única relevante en OpenGL. Cuando el proceso se llama a esta función, se termina de llamar a la FRAPS módulo y, a continuación, FRAPS captura la parte de atrás de búfer en la cola para la codificación a AVI y representa a su pequeña indicación. A continuación, se procesa la solicitud original para wglSwapBuffers y devuelve la ejecución del programa.

    Tan lejos como la consulta en C#… revisión EasyHook (http://easyhook.codeplex.com/) y ver si no funciona para usted. Yo personalmente no tengo experiencia con esta API.

    OriginalEl autor dans3itz

Dejar respuesta

Please enter your comment!
Please enter your name here