在Windows7下玩老游戲,會出現(xiàn)花屏的現(xiàn)象。
這個現(xiàn)象的原因是Win7的DirectDraw的256色調(diào)色板的兼容性問題,據(jù)說是默認(rèn)配置下,程序無法獲取調(diào)色板鎖。
一個簡單的解決方法是殺掉explorer進(jìn)程,估計這樣就會停止桌面主題修改調(diào)色板。
但是這不是一個一勞永逸的辦法。
方法一:
經(jīng)過在網(wǎng)上搜索,發(fā)現(xiàn)有這樣一個解決方案。
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)
就可以使得對應(yīng)的程序運(yùn)行于兼容模式下。
這三個鍵值中,Name是程序的文件名,F(xiàn)lags是常量,而ID是程序的時間戳。
以星際爭霸1.161為例,我們可以使用CFF Explorer打開Starcraft.exe,然后在Nt Headers-File Header中找到TimeDateStamp一項,發(fā)現(xiàn)其值為496589CA。
將該整數(shù)倒過來寫作低字節(jié)優(yōu)先的形式(little-endian),就是ca,89,65,49,這就是注冊表中的ID值。
網(wǎng)上的有解決方案聲稱HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\MostRecentApplication下的ID記錄的就是上一次運(yùn)行的游戲的時間戳。
但是我驗證的時候發(fā)現(xiàn)不一致。
通過此方法,星際爭霸已經(jīng)可以在我的機(jī)器上正常運(yùn)行。
此外,還有一種方法是通過Hook掉DirectDraw的函數(shù)來完成的,見
http://sol.gfxile.net/ddhack/
不過這個實現(xiàn)是通過軟件方法來進(jìn)行 索引->顏色 轉(zhuǎn)換的,沒有使用到顯卡加速,在運(yùn)行星際爭霸時比較卡。
但這種方法只需要在程序文件夾下放入一個ddraw.dll的文件就可以實現(xiàn),比較方便。
也許以后會有人通過DirectX或者OpenGL來模擬DirectDraw的功能,能夠比較完善的解決這個問題。
方法二:
如果你用優(yōu)化大師優(yōu)化Windows7過關(guān)機(jī)速度,那么很不幸你的屏幕將會閃,也就是點文件夾的時候,作為背景的桌面會跳出來閃一下,同時左上角會出現(xiàn)notresponding。
解決方法: 刪除HKEY_USERS\.DEFAULT\DESKTOP下的HUNGAPPTIMEOUT以及WAITTOKILLAPPTIMEOUT子鍵
刪除HKEY_CURRENT_USER\HKEY_CURRENT_USER\ControlPanel\HKEY_CURRENT_USER\ControlPanel\Desktop下的HUNGAPPTIMEOUT,WAITTOKILLAPPTIMEOUT,WAITTOKILLSERVICETIMEOUT子鍵。