- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我希望我的程序能够启动任何 Windows 游戏,并且在用户玩游戏时,间歇性地在游戏窗口的某些部分显示一些文本或图片。游戏可能处于窗口或全屏模式。根据我从在线资源中了解到的情况,这可以使用支持覆盖的图形库并使用 Windows Hooks 来跟踪目标应用程序的窗口来完成。在这方面,我有一些问题。
最佳答案
Fraps是从第三方应用程序对全屏 DirectX 应用程序执行此类操作的典型示例。它通过 Hook 一些系统调用并将自身插入到应用程序和 DirectX 之间的调用链中来工作。有一些性能影响,但一般来说影响很小。
This page似乎有一些关于如何以这种方式挂接应用程序的详细信息和示例代码。
如果我没记错的话,从其他论坛讨论(目前找不到链接。搜索“fraps 是如何工作的”之类的东西,这是一个热门问题),Fraps Hook 了一些东西来强制应用程序加载它的 DLL,然后 Hook Present() 调用并在调用真正的 Present() 之前执行 device->Clear() 调用,用一个小矩形列表设置为不同的颜色,这可以拼出它的 FPS 数显示。这对性能的影响很小,并且与应用程序正在执行的任何渲染都广泛兼容。覆盖位图会更复杂,因为在现在做起来并不容易。也许如果您可以 Hook EndScene,那么您可以做更多的事情,但您必须小心不要更改设备状态。
PIX 拥有访问 DirectX 驱动程序的特权,因此我不希望能够将其用作模型进行仿真。
如果目标应用程序在窗口模式下运行,挂接 DirectX 仍然有效,但您也可以只使用 GDI。
编辑:我认为this是我最初想到的链接。
关于windows - 如何在 Windows 游戏上叠加图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266346/
我是一名优秀的程序员,十分优秀!