windows 7 还原默认关联程序

来源:互联网 发布:赵薇眼睛知乎 编辑:程序博客网 时间:2024/05/05 17:17

        我想可能大家在操作自己的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 = &H80000001const HKCR = &H80000000dim kzmdim qkYesOrNoset ws = createobject("wscript.shell")set oReg = GetObject("Winmgmts:\root\default:StdRegProv")kzm = inputbox("请输入扩展名")kzmReg = "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\"&kzmqkYesOrNo = msgbox("是否清空所有的打开方式?",vbYesNo,"提示")if qkYesOrNo = 6 then     call regSetEmpty()else    call regRecovery()end ifsub regSetEmpty()    if not kzm = ""  thenon error resume nextws.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  thenFor Each keyName In arrKeyNamesif keyName = "OpenWithList" or keyName = "OpenWithProgids" thencall regValueDelete(keyName)elseif keyName = "UserChoice" then call regKeyDelete(keyName)end ifNext     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 arrValueNamesoReg.DeleteValue HKCU, kzmReg&"\"&keyName, valueName    nextend sub'删除注册表中的项sub regKeyDelete(keyName)    on error resume next    oReg.DeleteKey HKCU, kzmReg&"\"&keyNameend sub'立即重启计算机sub reStartComputer(message)yesOrNo = msgbox(message,vbYesNo,"提示")if yesOrNo = 6 then set oReg = nothingws.run "shutdown -f -r -t 0",0end if end sub 

 
0 0
原创粉丝点击