我想在一个使用directDraw的游戏窗口中绘图,在运行该游戏的时候,希望屏幕上出现自己绘的内容,直接findwindow(),可得到dc绘图,但由于游戏使用双缓冲,不停刷新屏幕所以我绘制的内容会不停闪烁。有没有办法得到其backsurface进行操作。http://expert.csdn.net/Expert/topic/1419/1419114.xml?temp=.4033014
该贴与本人问题相同

解决方案 »

  1.   

    我想到了一个办法不知道是否可行
    ddraw中切换图面用Flip()函数,我可以拦截该函数,得到图面缓冲区,进行修改,可以解决我的问题。
    但Flip()是图面对象的一个成员函数(不知道这么说是否正确),与普通api不同,能拦截到么?
    希望大家多多参与讨论,up有分。
      

  2.   

    拦截flip ,那应该用自己的ddraw.dll来替换掉原来的ddraw.dll,并将原来的改名为其他的名字,再loadlibray(...) , GetProcAddress(...)
      

  3.   

    突然又个想法,拦截bitblt或者strechblt的调用
    经过测试,在windows中的画图程序下成功拦截,但数据量出奇的大
    在传奇游戏中似乎也拦截成功了,但该游戏似乎没有调用这两个函数,不知道外挂是怎么做的
    谁能给点提示,分不是问题。
      

  4.   

    先说我自己是个VC菜鸟~~我也想做一个类试功能的程序~~~我看到direct draw里面可以create 一个surface 然后在surface上绘图 ~~ 不知道这个办法可否解决这个问题 ~~ 如果回答的实在很弱智~~请不要仍鸡蛋~~~
      

  5.   

    一般在游戏中是很少使用BitBlt或StrechBlt,而是Lock和Unlock,我想如果想拦截函数的话,应该拦截Unlock,至于为什么不拦截Lock是因为游戏中的数据会把你的数据覆盖。