基于DIRECTX全屏游戏如何窗口化?望高手指点!!!

解决方案 »

  1.   

    好象这个问题不该在这里提吧??
    可以通过反汇编找到DirectDrawCreate函数的入口点,然后设断。
    中断后返回领空再跟踪。
    设置协调模式的函数原型是 SetCooperativeLevel,:PTR IDirectDraw,:HWND hWnd,:DWORD dwFlags 
    关键是第三个参数它有如下取值 
    DDSCL_EXCLUSIVE  独占模式,此模式必须与 DDSCL_FULLSCREEN连用 
    DDSCL_FULLSCREEN  全屏模式 
    DDSCL_NORMAL  普通模式,也就是我们所说的窗口模式,此模式不能与DDSCL_EXCLUSIVE 或DDSCL_FULLSCREEN连用 
    DDSCL_NOWINDOWCHANGES  DirectDraw不允许改变窗体的大小 
    一般来说全屏模式下dwFlags的值是 DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN 
    要改的只是把这个参数的值改为DDSCL_NORMAL。 
    具体取值如下 
    #define DDSCL_EXCLUSIVE         10h 
    #define DDSCL_FULLSCREE         1h 
    #define DDSCL_NORMAL            8h 
    #define DDSCL_NOWINDOWCHANGES   4h 
    汇编和调试器使用的必要。 
      

  2.   

    同意 wuyuesisi(斯斯) 的意见
      

  3.   

    我说的是让其他全屏的游戏窗口化呀其实我也是认为拦截到SetCooperativeLevel函数就已经差不多了,可是该怎么拦这个函数呢
    拦截API还是很容易的,可是怎样拦截DDRAW.DLL中的函数?望指教!!