我想绕过EndScene任意DirectX 9应用程序来创建一个小的叠加层.例如,您可以采用FRAPS的帧计数器覆盖,激活后会在游戏中显示.
我知道以下方法:
创建一个新的d3d9.dll,然后将其复制到游戏路径.由于首先搜索当前文件夹,然后转到system32等,我的修改后的DLL会被加载,执行我的附加代码.
缺点:你必须在开始游戏之前把它放在那里.
缺点:您无法添加游戏特定代码.您不能排除不希望加载DLL的应用程序.
缺点:每个系统的偏移量都不相同.
缺点:当进程已经运行时,无法注入DLL.您必须使用CREATE_SUSPENDED标志启动进程以挂接初始Direct3DCreate9.
EndScene从该设备获取偏移量并将其挂钩,从而导致游戏使用的设备挂钩.缺点:从我读过的一些信息来看,创建第二个设备可能会干扰现有设备,并且可能会出现窗口与全屏模式等错误.
EndScene.缺点:看起来不那么可靠.
如何挂钩EndScene注入的DLL,可以在游戏运行时加载,而不必在其他系统上处理不同的d3d9.dll,并使用可靠的方法?例如,FRAPS如何执行它的DirectX挂钩?DLL不应该适用于所有游戏,只适用于我通过注入它的特定进程CreateRemoteThread.
我希望我的程序能够启动任何Windows游戏,当用户正在播放时,间歇性地在游戏窗口的某些部分显示一些文本或图片.游戏可以是窗口模式或全屏模式.从我从在线资源中可以看出,这可以使用支持叠加的图形库并使用Windows Hook来跟踪目标应用程序的窗口来完成.在这方面,我有一些问题.