在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的功能,能夠比較完善的解決這個問題。