易语言D3D HOOK写屏 解决了给500.

高分请问一下,易语言D3D HOOK写屏 解决了给500.?

RT:我想在一个3D游戏的屏幕上画文本,目前已经知道实现的方法,HOOK 然后在论坛也找到了D3D写文本的方法,但是不知道怎么搞到游戏上去。所以求助,求高手帮忙。
最新回答
浮世

2024-11-30 04:38:29

.版本 2
.支持库 spec
.支持库 ogrelib

.子程序 HOOK_安装

集_Direct3DCreate9 = GetProcAddress (GetModuleHandleA (“d3d9.dll”), “Direct3DCreate9”)
.如果真 (D3DxHook.安装ApiHook (集_Direct3DCreate9, 到整数 (&NewDirect3DCreate9)))
D3DxHook.开始Hook ()
.如果真结束

.子程序 NewDirect3DCreate9, 整数型, , No.1
.参数 SDKVersion, 整数型
.局部变量 返回值, 整数型
.局部变量 CreateDevice地址, 整数型

D3DxHook.停止Hook ()
返回值 = Jmp (集_Direct3DCreate9, SDKVersion)
集_CreateDeviceAdd = 取_类_函数地址 (返回值, 17)
HOOKCreateDevice.安装ApiHook (集_CreateDeviceAdd, 到整数 (&NewCreateDevice))
HOOKCreateDevice.开始Hook ()
D3DxHook.开始Hook ()
返回 (返回值)

.子程序 NewCreateDevice, 整数型, , 返回值为设备对象
.参数 pDx9, 整数型
.参数 Adapter, 整数型
.参数 DeviceType, 整数型
.参数 hFocusWindow, 整数型
.参数 BehaviorFlags, 整数型
.参数 pPresentsentationParameters, 整数型
.参数 pPresentturnedDeviceInterface, 整数型
.局部变量 返回值, 整数型
.局部变量 Present地址, 整数型
.局部变量 pFunAddress, 整数型
.局部变量 参数, 整数型, , "1"
.局部变量 局_pPresentturnedDeviceInterface, 整数型

HOOKCreateDevice.停止Hook ()
返回值 = Jmp (集_CreateDeviceAdd, pDx9, Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentsentationParameters, pPresentturnedDeviceInterface)
局_pPresentturnedDeviceInterface = 取指针内容_整数 (pPresentturnedDeviceInterface)
EndScene = 取_类_函数地址 (局_pPresentturnedDeviceInterface, 168) ' 读_DWORD (汇编加法 (读_DWORD (局_pPresentturnedDeviceInterface), 169))
' 调试输出 (十到十六 (EndScene))
集_Present = 取_类_函数地址 (局_pPresentturnedDeviceInterface, 18) ' 取_Presen地址 (返回值) '
集_Reset = 取_类_函数地址 (局_pPresentturnedDeviceInterface, 17)
集_Reset跳回地址 = ASM_ADD (集_Reset, 5)
_HookJmp (集_Reset, &NewReset)
HOOKPresent.安装ApiHook (集_Present, 到整数 (&NewPresent))
HOOKPresent.开始Hook ()
HOOKCreateDevice.开始Hook ()
返回 (返回值)

.子程序 NewPresent, 整数型, , No.3
.参数 pDxdevice, 整数型, , 8
.参数 pSourceRect, 整数型, , c
.参数 pDestRect, 整数型, , 10
.参数 hDestWindowOverride, 整数型, , 14
.参数 pDirtyRegion, 整数型, , 18
.局部变量 返回值, 整数型
.局部变量 设备, 整数型

HOOKPresent.停止Hook ()
调试输出 (pDxdevice)
.如果真 (D3D_是否创建 = 假)
D3DCreateFontA (pDxdevice, 12, 6, 400, 0, 0, 1, 7, 0, 0, “宋体”, 集_字体)
D3D_是否创建 = 真
.如果真结束
__DrawMyTextEx (“[欢迎使用菊花科技]”, 10, 10, 合成颜色 (255, 255, 255, 255))
返回值 = Jmp (集_Present, pDxdevice, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion)
HOOKPresent.开始Hook ()
返回 (返回值)
会笑才不是傻冒

2024-11-30 06:44:20

呵呵,我也在研究这个问题,我讨厌易语言提供的窗口,不同步,全屏模式还可以,我用系统的API的窗口创建,消息泵问题又来了,我用线程才解决,文字没法写,我用文本转字节集数据传入Dd3d纹理,麻烦死了……,其他还可以,基本完成,
风软一江水

2024-11-30 03:34:45

是要弄网游的还是单机的
有些网游有保护 钩挂了D3D函数会出问题
单机游戏的话 就没问题
htt p://bbs.eyuyan.c om/read.php?tid=318360
这是我以前发的帖 你可以参考一下
追问
能教我一下么?大神。我就是参考了你这个源码和之前aiqing发的那个。但是不太会搞。
我直接把创建设备那里的句柄改为了要写字的屏幕的句柄。画到是能画上去。但是一直在闪啊。
追答
会闪可能是因为你的刷新率和游戏刷新率不同步
钩挂游戏的D3D函数:Present
把Present的第一个参数 当做是句柄 同时在自构建的Present函数里写文本就行
追问
大神能随便用一个单机游戏写一个例子么?不胜感激、
煙味少女

2024-11-30 07:48:13

去易语言百度贴吧看一下,大神很多!
追着太阳跑

2024-11-30 05:49:10

这个我最近也在学