hook com 终于成功了,开贴来感谢w_anthony ,lake_cx ,rageliu 等帮助过我的人!

HSxuguangxing 2008-08-28 12:53:39
终于成功了,最终还是w_anthony大哥一语中的,我就按你说的方法搞顶的!不过rageliu大哥,你说hook EndSence()函数可以实现无闪烁的写字,可是我出来的还是闪烁的效果啊!这怎么回事?难道是魔兽的执行效率太低还是能看出闪烁的效果?
...全文
313 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
HSxuguangxing 2008-08-28
  • 打赏
  • 举报
回复
散分了,回帖就有分!
zqh886 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 datoucaicai 的回复:]
恭喜!
[/Quote]
y_z_j 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 weidong0210 的回复:]
引用 4 楼 liumeiqinyang 的回复:
恭喜lz,跟着牛牛们蹭点分
[/Quote]
dajiuzi 2008-08-28
  • 打赏
  • 举报
回复




jjfwenwenti 2008-08-28
  • 打赏
  • 举报
回复
hook有点笨拙了,还是游戏功能调用好啊~
liuhefeng 2008-08-28
  • 打赏
  • 举报
回复
请教下各位:

setForegroundWindow(hh1);
keybd_event(VK_UP,0,0,0);

我想实现以上代码的功能,(按下UP键不起),但又不能将这个程式置前.

实现方法不限,最好能给出示例代码。

急用,望高手不吝赐教,谢谢!!!
w_anthony 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 rageliu 的回复:]
引用 42 楼 w_anthony 的回复:
你要知道你钩的是Present,而且HookProc是先执行oldProc的,而oldProc就是Present,执行完以后才是TextOut,也就是说你的TextOut永远是在Present之后执行,那谁去覆盖你的TextOut?会不会闪,你试一下不就好了,80%不会。



我认为会闪,这样的刷新时机不可能一致啊
[/Quote]

刷新时机是不一致,但是时间间隔很短,基本上不可能看出来,这就像我们不做双缓冲直接TextOut,如果TextOut的条目不是很多的话,你是发现不了的。
我说80%,是因为我不知道魔兽它的代码是怎么写的,只要没有做过特殊的处理,就不会感到闪烁。
HSxuguangxing 2008-08-28
  • 打赏
  • 举报
回复
其实我也觉得还会闪烁,呵呵!有时间我来测试一下!
rageliu 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 w_anthony 的回复:]
你要知道你钩的是Present,而且HookProc是先执行oldProc的,而oldProc就是Present,执行完以后才是TextOut,也就是说你的TextOut永远是在Present之后执行,那谁去覆盖你的TextOut?会不会闪,你试一下不就好了,80%不会。

[/Quote]

我认为会闪,这样的刷新时机不可能一致啊
HSxuguangxing 2008-08-28
  • 打赏
  • 举报
回复
原帖在这:http://topic.csdn.net/u/20080827/11/82fa7766-f8d2-4f9d-ae2f-1115a7c07a57.html
HSxuguangxing 2008-08-28
  • 打赏
  • 举报
回复
To w_anthony :
我明白你的意思了,我等下试试看,呵呵,怎么只用80%不会啊?是不是怕下一次的present在覆盖了TextOut?
一名程序员 2008-08-28
  • 打赏
  • 举报
回复
恭喜楼主。请问原帖是什么啊?
w_anthony 2008-08-28
  • 打赏
  • 举报
回复
你要知道你钩的是Present,而且HookProc是先执行oldProc的,而oldProc就是Present,执行完以后才是TextOut,也就是说你的TextOut永远是在Present之后执行,那谁去覆盖你的TextOut?会不会闪,你试一下不就好了,80%不会。
lake_cx 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 rageliu 的回复:]
大家都没明白我的意思,我的意思是“要写到游戏的离屏表面(也就是真正的游戏画面)里面”
[/Quote]
就是直接写入后台的那个屏幕缓冲吧?(类似双缓冲)然后让魔兽present把字符一起给挪到前台。
我想,除了用D3D来输出文字,还能怎么搞?GDI写入的缓冲跟D3D的缓冲貌似找不到什么关系
HSxuguangxing 2008-08-28
  • 打赏
  • 举报
回复
To w_anthony:
我想那样也会出现闪烁的效果,按照rageliu 的说法,我的TextOut还是直接写上去的,并没有和魔兽的界面一起present出来,这样的话,魔兽只要present以后,我的textout还是被覆盖了,这样看上去还是会有闪烁的效果的!
yyunffu 2008-08-28
  • 打赏
  • 举报
回复
恭喜!
HSxuguangxing 2008-08-28
  • 打赏
  • 举报
回复
呵呵,貌似这步骤应该不是很难!网上资料倒是挺多的!
w_anthony 2008-08-28
  • 打赏
  • 举报
回复
我说LZ啊,你怎么不变通一下!-_-b
就hook掉Present就可以了,hookProc里面先执行oldProc,然后再TextOut
rageliu 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 HSxuguangxing 的回复:]
我现在正在研究如何写到离屏表面,貌似要获得设备内存什么的!
[/Quote]

哈哈,你悟了
rageliu 2008-08-28
  • 打赏
  • 举报
回复
这样说吧,就象游戏刚有了画面,这时候这个画面只有背景,没有怪物。游戏就做了操作,画上几个怪物吧,哈哈,于是怪物就出现在画面里面了,怪物不会闪烁吧。

楼主现在要做的,其实就是和画怪物一样的操作,我想这次应该说明白了吧
加载更多回复(33)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧