是否可以检测到哪些应用程序正在使用OpenGL或DirectX类似于FRAPS? (可能使用某种形式的钩子(Hook))?我可能不需要真正绘制到窗口,我只需要暂时知道哪些进程正在执行某种形式的3D渲染。

(编辑:)
如果您不熟悉它,FRAPS是一个程序,可用于在3D应用程序上绘制“每秒帧数”计数器。 FRAPS可以自行查找所有正在运行的3D应用程序,而无需您指定进程名称。

外部游戏的“每秒帧数”计数器示例:

最佳答案

可能最简单的方法是检查OpenGL和DirectX核心库的存在,也可能也要在驱动程序中添加OGL dll(例如nvogl),这可以通过 EnumProcesses EnumProcessModulesEx 使用p/完成。调用,这至少会为您提供一组可能使用OGL或DX的过程。

当然,某些应用程序会同时加载两个API并仅使用一个,或仅有条件地使用
GFX API之一(尽管后者仅在专用工具等中出现),为此,IMO,最好的检查方法是执行某种形式的注入(inject)
或像调试器一样附加到进程,然后将DX的Present或OGL的wglSwapBuffers挂钩。

通过枚举GDI句柄并查找DXGI或OGL渲染上下文,您可能会不使用钩子(Hook)而逃脱,这是多么可行,我不知道。

10-08 13:42