1. 程式人生 > >windows 7 還原預設關聯程式

windows 7 還原預設關聯程式

        我想可能大家在操作自己的win7系統的時候,可能遇到這樣的問題,就是自己的.exe副檔名的程式,用wps或者word開啟之後,系統就會把wps或者word,變成可執行程式的

預設開啟方式。這樣讓你煩不勝煩。而且還改不過來是吧。

        本文就旨在解決這個問題。本文的策略是修改登錄檔。

       一般遇到這個問題。可以在執行裡鍵入regedit。進入到登錄檔編輯器裡。HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts在這個登錄檔項的下面找到對應的副檔名。比如我要找.bak的副檔名,就可以去找HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bak這個項。一般要還原它的預設開啟程式的話,只需要把這個項下面的UserChoice這一子項給刪除就可以了。不過如果刪除之後重啟,並不起效果的話。可以可慮直接把整個.bak的項給刪了。要是這樣再不起什麼效果的話。HKEY_CLASSES_ROOT\.bak可以找到這一項下面的ShellNew下的ItemName這個鍵修改它的值,自行修改檔案的預設開啟方式。

        關於這麼一個過程,我寫了一個vbs指令碼來操作這個過程。下面就還以.bak檔案為例。圖解說明。

1,

  在未修改預設關聯程式時.bak檔案的圖示是這樣嬸的。

2,

 這個是修改.bak檔案的開啟方式。

3,

 選擇Notepad++

4,

,

看,選擇了Notepad++作為開啟方式,之後圖示都起了變化。

      這個時候執行我寫的 win7預設程式修改.vbs。

5, 點選確定 6, 可以選擇是,也可以選擇否。選擇是則清空HKCR和HCU下所有有關.bak的項。選擇否的話,只是清除HKCU下的UserChoice項以及OpenWithList和OpenWithProgids中除了預設鍵的所有子鍵。 7,
點選重啟電腦,就可發現.bak的檔案就恢復到了最初的狀態。要是不選擇清空所有開啟方式的話,很有可能重啟完之後,.bak檔案會預設成為記事本檔案。不信可以試試。 下面為 win7預設程式修改.vbs的相關程式碼。
const HKCU = &H80000001
const HKCR = &H80000000

dim kzm
dim qkYesOrNo
set ws = createobject("wscript.shell")
set oReg = GetObject("Winmgmts:\root\default:StdRegProv")

kzm = inputbox("請輸入副檔名")
kzmReg = "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\"&kzm
qkYesOrNo = msgbox("是否清空所有的開啟方式?",vbYesNo,"提示")

if qkYesOrNo = 6 then 
    call regSetEmpty()
else
    call regRecovery()
end if

sub regSetEmpty()
    if not kzm = ""  then
	on error resume next
	ws.regDelete("HKCR\"&kzm&"\")
	ws.regDelete("HKCU\"&kzmReg&"\")
	call reStartComputer("已清空開啟方式,是否立即重啟電腦?")
    end if 
end sub 

'恢復預設開啟方式
sub regRecovery()
	if not kzm = ""  then
	    on error resume next
	    oReg.EnumKey HKCU,kzmReg,arrKeyNames
	    if  UBound(arrKeyNames) > 0  then
		For Each keyName In arrKeyNames
			if keyName = "OpenWithList" or keyName = "OpenWithProgids" then
				call regValueDelete(keyName)
			elseif keyName = "UserChoice" then 
				call regKeyDelete(keyName)
			end if
		Next
	     end if
	     call reStartComputer("已恢復預設開啟方式,是否立即重啟電腦?")
	end if 
end sub 
'刪除登錄檔中的鍵
sub regValueDelete(keyName)
    on error resume next
    oReg.EnumValues HKCU, kzmReg&"\"&keyName,arrValueNames,arrValueTypes
    for each valueName in arrValueNames
	oReg.DeleteValue HKCU, kzmReg&"\"&keyName, valueName
    next
end sub
'刪除登錄檔中的項
sub regKeyDelete(keyName)
    on error resume next
    oReg.DeleteKey HKCU, kzmReg&"\"&keyName
end sub
'立即重啟計算機
sub reStartComputer(message)
	yesOrNo = msgbox(message,vbYesNo,"提示")
	if yesOrNo = 6 then 
		set oReg = nothing
		ws.run "shutdown -f -r -t 0",0
	end if 
end sub