如何用VB制作一个窗体,可以显示在 CS 游戏里,或者 魔兽 游戏里?这2种游戏都是非WINDOWS窗体的游戏,是OpenGL 或者 Direct3D我用快捷键 呼出 VB 制作好的程序,当界面出现的时候,游戏就会退出全屏模式!这个问题如何解决???我想用快捷键呼出 VB程序界面的时候,让它显示在游戏屏幕里!游戏是3D的!

解决方案 »

  1.   

    正好前几个月搞过一个类似的问题,得出以下几点方案,仅供VB版内部参考,请勿外泄,切记切记!
    方案1:线程注入,难度非常大,并且无论OPENGL也好,DIRECTX也好,各自都有N多个版本,不同的版本都要写不同的注入。如果楼主能做成,请直接将简历寄给比尔.盖子,申请DIRECTX11的开发主管置位。方案2:硬件写屏,扰开操作系统,直接对显卡的显存进行读写。理论上可以作到避免WINDOWS死机。但是因为外面的显卡种类实在是N多,比前面说到的版本的种类要多出3个数量级,工作量比较大。如果楼主在有生之年可以完成,请将本人身份证及户口本寄给吉尼斯世界记录大全,申请最长寿的人类称号。方案3:买个液晶显示器,打开后盖,将完整的液晶板和控制电路拆下,贴到另一个显示器上,这样,楼主即可在任何游戏中现实任何你想要出现的内容了,无论该游戏是几D的都不会影响游戏效果或者是程序的现实效果。如果该项目楼主成功完成10例以上,并且无伤亡事故,可以考虑去开一个液晶显示器改装门市部。
      

  2.   

    比较难,因为vb不支持写标准dll,所以无法完成诸如注入之类的工作。
      

  3.   

    可以试一下用SetParent这个API函数将你的窗体设置成游戏窗体的子窗体看看行不行。SetParent函数的VB声明如下:
    Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hwndNewParent As Long) As Long
    假设你得到游戏窗体的句柄是12345,而你的程序窗体句柄是54321,那么就这样写:
    SetParent 54321, 12345
    执行以上函数会将你的程序窗体设置成游戏的一个子窗体,那么就有可能显示在游戏中,因为即使Direct3D游戏,在windows中仍然可以算是一个窗体。到底行不行,你试试就知道了
      

  4.   

    http://community.csdn.net/Expert/topic/5219/5219055.xml?temp=5.932033E-03
    看看是否有用
      

  5.   

    楼主说的这个功能,在《金山游侠V》里是实现了的。金山把这个作为一个技术亮点。VB实现起来肯定不是容易事。
    给你贴个金的帮助文档里讲到的:DirectX智能弹出 --------------------------------------------------------------------------------    时下非常流行的DirectX技术能直接操纵硬件如声卡、显卡等,突破了其它技术在处理Windows下的图像方面的瓶颈,使Windows下的游戏能具有更加逼真的声音和影像。因而使DirectX成为Windows下开发游戏理所当然的最佳平台。比如说,深受大家的喜爱的《星际争霸》、《暗黑破坏神》等,都是DirectX游戏,其画面流畅,声光效果华丽之极,令人咋舌,这都是DirectX的功劳。但是,对于此类游戏的修改就成为一大难题。因为,在DirectX模式下直接弹出自己的交互界面几乎都是不可能的事,游戏修改也就无从谈起了。
        在这种情况下,许多游戏修改工具都采用了通过在不同程序之间来回切换达到修改的目的。这种修改方式能在一定程度上满足玩家的要求,但是其缺点也是显而易见的。来回切换操作复杂,消耗系统资源,因而会浪费不少时间。而且,还有许多游戏在切换后,是无法回到游戏的,当然也就无法修改,只能通过修改存盘文件来达成目的,如RPG游戏《风云之天下会》、《西风狂诗曲》等。
        《金山游侠V》的开发者从事DirectX编程多年,积累了大量在DirectX下图形处理技术方面的经验,攻克了此方面的许多难题,能针对不同类型游戏,无论是运行在 Windows平台下的MSDOS游戏,还是Windows窗口模式的游戏,以及Windows DirectX游戏,都能凭借强大的智能引擎,分辨出当前游戏的模式,直接弹出,无须来回切换。从而实现了在DirectX游戏下的直接弹出,解决游戏修改工具方面的一个重大难题。