標題 新增找內文!

看整串內容篇數:0 / 0

15GP-BP

#1 【心得】Windows 7 關閉顯示卡硬體加速

發表:2010-11-15 14:08:44看他的文開啟圖片

slimshsieh(阿布)

廢柴上的風霜菇 LV18 / 妖精 / 法師
巴幣:13250
GP:56
經驗:

以下是在 Windows 7 關閉顯示卡硬體加速的最終簡易方法,使用在防止多開視窗時的延遲現象

簡化版:(在 x64 下,不需關閉 x64 相關的機碼,只需關閉 x86 的部分)
REM 將以下內容存成一批次檔後執行 (ex: ControlDX.cmd)
@echo off
@net user administrator /active:yes 1>nul
FOR /F "tokens=3" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx"') DO SET BuildLabEx=%%A 1>nul
ECHO %BuildLabEx% | FINDSTR /I "amd64" 1>nul
IF NOT ERRORLEVEL 1 (
SET RootKey=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft
) ELSE (
SET RootKey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
)
echo %RootKey%\Direct3D\Drivers [1 5 8 17] > regset.ini
echo %RootKey%\DirectDraw [1 5 8 17] >> regset.ini
regini regset.ini
FOR /F "tokens=3" %%A IN ('REG QUERY "%RootKey%\DirectDraw" /v "EmulationOnly"') DO SET RegValue=%%A 1>nul
SET /a RegValue=1-RegValue 1>nul
@reg add "%RootKey%\Direct3D\Drivers" /v "SoftwareOnly" /t REG_DWORD /d %RegValue% /f 1>nul
IF ERRORLEVEL 1 SET /a RegValue=-1 1>nul
@reg add "%RootKey%\DirectDraw" /v "EmulationOnly" /t REG_DWORD /d %RegValue% /f 1>nul
IF ERRORLEVEL 1 SET /a RegValue=-1 1>nul
echo ************ 設定硬體加速 ************
echo *                                    *
IF %RegValue% == 1 (
echo * Direct3D/DirectDraw 硬體加速已關閉 *
) ELSE IF %RegValue% == 0 (
echo * Direct3D/DirectDraw 硬體加速已開啟 *
) ELSE (
echo * Direct3D/DirectDraw 無法寫入機碼值 *
)
echo *                                    *
echo ******** 2 秒鐘後視窗自動關閉 ********
@ping 127.0.0.1 -n 5 -w 2000 1>nul
EXIT
REM 將以上內容存成一批次檔後執行 (ex: ControlDX.cmd)

上述新增紅字部分是用來修改機碼權限
因為有玩家反映會發生存取錯誤
而我剛好有一台電腦也出現同樣問題
查了一下發覺是寫入機碼權限問題
但可能每個人遇到的狀況會不同
所以,我把會寫入資料的機碼權限調整成管理員皆可寫入
ControlDX.cmd 請用滑鼠右鍵選單中[以系統管理員身分執行]
應該就不會再發生存取錯誤的狀況

執行後會自動判斷硬體加速狀態,若開啟時則關閉,若關閉則開啟
不用懷疑,關閉或開啟硬體加速本來就是這麼簡單。

如果出現 REGINI: Failed to load from file 'regset.ini' (5) 請照以下做法處理,這個狀況是因為機碼不存在且權限被系統鎖住

========== 我是分隔線 ==========
上面的方法出問題的玩家,或是你確認你電腦中跟 DirectX 相關機碼權限被鎖住
那可以試試以下方法
1. 請先下載 SubInACL,這是微軟提供的工具程式,可以用來修改機碼的擁有者跟權限
http://www.microsoft.com/en-us/download/details.aspx?id=23510

2. 下載完畢請執行


3. 請把這個程式安裝在 C:\Windows\System32 (若是你的系統安裝在別的資料匣,請自行對應)
安裝在 System32 方便以下的批次檔不須指定 SubInACL.exe 程式路徑
如果不想安裝在 System32,請自行修改以下批次檔中有關 SubInACL.exe 程式路徑


4. 安裝完畢請開啟 \Windwos\System32 資料匣檢查一下是否有 subinacl.exe 這個檔案存在


5. 一樣寫一個批次檔,將以下的內容存到 FixD3D.cmd
REM 將以下內容存成一批次檔後執行 (ex: FixD3D.cmd)
@net user administrator /active:yes 1>nul
subinacl.exe /keyreg SOFTWARE\Microsoft\Direct3D /setowner=Administrators
subinacl.exe /keyreg SOFTWARE\Microsoft\Direct3D /grant=Administrators=F
subinacl.exe /keyreg SOFTWARE\Microsoft\Direct3D\Drivers /setowner=Administrators
subinacl.exe /keyreg SOFTWARE\Microsoft\Direct3D\Drivers /grant=Administrators=F
subinacl.exe /keyreg SOFTWARE\Microsoft\DirectDraw /setowner=Administrators
subinacl.exe /keyreg SOFTWARE\Microsoft\DirectDraw /grant=Administrators=F
FOR /F "tokens=3" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx"') DO SET BuildLabEx=%%A 1>nul
ECHO %BuildLabEx% | FINDSTR /I "amd64" 1>nul
IF NOT ERRORLEVEL 1 (
SET RootKey=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft
) ELSE (
SET RootKey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
)
REM 以下的部分是新增或修正機碼值,因為有些人會沒有以下機碼
echo Windows Registry Editor Version 5.00 > Direct3DDrivers.reg
echo. >> Direct3DDrivers.reg
echo [%RootKey%\Direct3D\Drivers] >> Direct3DDrivers.reg
echo "SoftwareOnly"=dword:00000000 >> Direct3DDrivers.reg
echo "EnumReference"=dword:00000000 >> Direct3DDrivers.reg
echo "EnumRamp"=dword:00000000 >> Direct3DDrivers.reg
echo. >> Direct3DDrivers.reg
echo [%RootKey%\Direct3D\Drivers\Direct3D HAL] >> Direct3DDrivers.reg
echo "Base"="hal" >> Direct3DDrivers.reg
echo "Description"="Microsoft Direct3D Hardware acceleration through Direct3D HAL" >> Direct3DDrivers.reg
echo "GUID"=hex:e0,3d,e6,84,aa,46,cf,11,81,6f,00,00,c0,20,15,6e >> Direct3DDrivers.reg
echo. >> Direct3DDrivers.reg
echo [%RootKey%\Direct3D\Drivers\Ramp Emulation] >> Direct3DDrivers.reg
echo "Base"="ramp" >> Direct3DDrivers.reg
echo "Description"="Microsoft Direct3D Mono(Ramp) Software Emulation" >> Direct3DDrivers.reg
echo "GUID"=hex:20,6b,08,f2,9f,25,cf,11,a3,1a,00,aa,00,b9,33,56 >> Direct3DDrivers.reg
echo. >> Direct3DDrivers.reg
echo [%RootKey%\Direct3D\Drivers\RGB Emulation] >> Direct3DDrivers.reg
echo "Base"="rgb" >> Direct3DDrivers.reg
echo "Description"="Microsoft Direct3D RGB Software Emulation" >> Direct3DDrivers.reg
echo "GUID"=hex:60,5c,66,a4,73,26,cf,11,a3,1a,00,aa,00,b9,33,56 >> Direct3DDrivers.reg
regedit /s "%~dp0Direct3DDrivers.reg" >nul
REM 將以上內容存成一批次檔後執行

執行完這個 FixD3D.cmd 後,請再次執行 regedit 檢查前述三個機碼的權限及擁有者,然後重新執行 ControlDX.cmd

會出問題都是權限或是機碼不完整的問題,如果這樣還無法解決,那就只剩你手動去修改機碼這個方法了,我寫成批次檔來處理也只是自動去修改機碼,萬一你無法用手動的方式修改以下機碼,那麼批次檔也不可能幫你修改
開關硬體加速會去修改到的機碼如下
x86:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\Drivers\SoftwareOnly 這個值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw\EmulationOnly 這個值
x64:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Direct3D\Drivers\SoftwareOnly 這個值
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\EmulationOnly 這個值

這兩個數值為 0 時為開啟硬體加速,這兩個數值為 1 時關閉硬體加速

如果執行 ControlDX.cmd 出問題,請手動去修改以上兩個機碼,把數值都設為 0,不需重開機就可以解決你其他遊戲需要用到硬體加速而無法玩的問題,然後照上述方法去檢查機碼權限,如果你連用手動都無法修改,那麼我也無能為力了。
最後編輯:2013-07-29 15:19:51 ◆ Origin: <114.39.169.xxx>

顯示稍舊的 3 則留言

快速回覆文章,請先登入

看整串內容篇數:0 / 0

板務人員
本板熱門推薦
【情報】7.3時空門NPC(新增兌獎NP第一個NPC在雷鎮雜貨店51.89(白毛飛)進去後到8.1進...(繼續閱讀
【情報】魔幣版火柴獎品列表整理了,各位板友提供的資料,希望大家還可以繼續分享自己的寶物...(繼續閱讀
【攻略】7.0-3 任務1.持"眾神挑戰證"去雷克塔爾鎮(可用白...(繼續閱讀
【攻略】7.0-3 彙集1.雷鎮雜貨店51.89(白毛飛)進去後到8.1進客房跟入面...(繼續閱讀