• 在Windows7下玩老游戏花屏的解决办法


    在Windows7下玩老游戏花屏的解决办法

    地狱门神

    在Windows7下玩老游戏,如星际争霸,会出现花屏的现象。

    这个现象的原因是Win7的DirectDraw的256色调色板的兼容性问题,据说是默认配置下,程序无法获取调色板锁。

    一个简单的解决方法是杀掉explorer进程,估计这样就会停止桌面主题修改调色板。

    但是这不是一个一劳永逸的办法。

    经过在网上搜索,发现有这样一个解决方案。

    DirectDraw有一个注册表项,用于开启兼容模式,位于

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\Compatibility

    (Win7 x64)

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw\Compatibility

    (Win7 x86)

    在这个注册表项下添加需要启用兼容模式的exe,如:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\Compatibility\StarCraft116]
    "Name"="Starcraft.EXE"
    "ID"=hex:ca,89,65,49
    "Flags"=hex:00,08,00,00

    (Win7 x64)

    就可以使得对应的程序运行于兼容模式下。

    这三个键值中,Name是程序的文件名,Flags是常量,而ID是程序的时间戳。

    以星际争霸1.161为例,我们可以使用CFF Explorer打开Starcraft.exe,然后在Nt Headers-File Header中找到TimeDateStamp一项,发现其值为496589CA。

    将该整数倒过来写作低字节优先的形式(little-endian),就是ca,89,65,49,这就是注册表中的ID值。

    网上的有解决方案声称HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\MostRecentApplication下的ID记录的就是上一次运行的游戏的时间戳。

    但是我验证的时候发现不一致。

    通过此方法,星际争霸已经可以在我的机器上正常运行。

    此外,还有一种方法是通过Hook掉DirectDraw的函数来完成的,见

    http://sol.gfxile.net/ddhack/

    不过这个实现是通过软件方法来进行 索引->颜色 转换的,没有使用到显卡加速,在运行星际争霸时比较卡。

    但这种方法只需要在程序文件夹下放入一个ddraw.dll的文件就可以实现,比较方便。

    也许以后会有人通过DirectX或者OpenGL来模拟DirectDraw的功能,能够比较完善的解决这个问题。

  • 相关阅读:
    方维分享系统,分享的用户得到商品的佣金
    方维采集失败,方维后台采集不了怎么办
    thinkphp 的 URL 中的 & 被转义成了 & 成了死链接
    PHP用curl采集天猫详细页
    xampp1.8.3 配置 php5.x 访问 SQL Server 2008
    ArcGIS 10 线转点 polyline to points
    使用BCP从Sybase远程数据库中导出数据
    百度UEditor添加视频 增加支持“通用代码”功能,支持微信
    firefox修改user-agent
    Twitter Storm学习笔记
  • 原文地址:https://www.cnblogs.com/Rex/p/1924327.html
Copyright © 2020-2023  润新知