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