Directx 有没有一种程序化的方式来查看游戏使用的图形API?

Directx 有没有一种程序化的方式来查看游戏使用的图形API?,directx,directx-11,vulkan,steam,directx-9,Directx,Directx 11,Vulkan,Steam,Directx 9,对于像DOTA 2这样可以使用不同图形API(如DX9、DX11、Vulkan)运行的游戏,我还没有找到一个可行的解决方案来检查当前使用的API。我想这样做,以正确地注入一个动态链接库,以便在游戏中显示图像 我已经研究过手动检查游戏加载的dll 此工具例如: 但是,对于DOTA,如果在steam上的启动选项中未指定任何库,则它将同时加载d3d9.dll和d3d11.dll库。关于如何确定使用的正确图形API,有没有其他想法?在Vulkan中,一个干净的方法是实现一个Vulkan层来进行覆盖。它比

对于像DOTA 2这样可以使用不同图形API(如DX9、DX11、Vulkan)运行的游戏,我还没有找到一个可行的解决方案来检查当前使用的API。我想这样做,以正确地注入一个动态链接库,以便在游戏中显示图像

我已经研究过手动检查游戏加载的dll

此工具例如:


但是,对于DOTA,如果在steam上的启动选项中未指定任何库,则它将同时加载d3d9.dll和d3d11.dll库。关于如何确定使用的正确图形API,有没有其他想法?

在Vulkan中,一个干净的方法是实现一个Vulkan层来进行覆盖。它比直接注入DLL稍微干净。它可以在多个平台上工作

在DirectX中,screencap软件通常会这样做。一些软件添加了FPS计数器和类似的叠加。似乎有类似目标的开源软件,例如:here:。我认为传统的方法是截取(即win32 api术语中的“hook”)所有适当的api调用

至于简单的检测,如果它调用D3D12CreateDevice,那么很可能是Direct3D 12。但是,该应用程序也可以为所有API创建设备,并继续不使用它们。但是我认为如果你只想做一个覆盖,API检测对你来说并不是特别重要;只要你能截获所有当前通话,并在上面画上你的东西