网站地图    收藏   

主页 > 系统 > windows >

win7下永远解决“右键某文件----选择打开方式--

来源:自学PHP网    时间:2015-04-17 17:13 作者: 阅读:

[导读] win7下永远解决右键某文件----选择打开方式----出现两个记事本的情况如上图,很多人会发现在右键菜单中会出现两个 记事本的情况。其实这也是很正常的一件事,因为在我们系统windows文...

win7下永远解决“右键某文件----选择打开方式----出现两个记事本”的情况
 
如上图,
很多人会发现在右键菜单中会出现两个 “记事本”的情况。其实这也是很正常
的一件事,因为在我们系统windows文件夹(C:\Windows)和system32文件
夹(C:\Windows\System32)下面各有一个notepad.exe程序,系统在注册应用
程序和文件关联打开方式的时候,分别使用了它们,但是打开方式又要读取这
两个地方,这就出来两个记事本了,呵呵,我这么一说应该就明白是什么回事了!
我做了一个批处理,用来处理这个问题,把里面的代码复制粘贴到文本文件,
保存为后缀.bat的文件,执行就可以了。
@echo off
if exist "%systemroot%\notepad.exe" set Npath="%systemroot%\
notepad.exe %%"1
if not exist "%systemroot%\notepad.exe" set Npath="%systemroot%
\system32\notepad.exe %%"1
reg add "HKCR\txtfile\shell\open\command" /ve /d %Npath% /t REG_SZ /f
reg add "HKCR\Applications\notepad.exe\shell\open\command"
/ve /d %Npath% /t REG_SZ /f
reg add "HKCR\SystemFileAssociations\text\shell\open\command"
/ve /d %Npath% /t REG_SZ /f
经我测试,再加上翻阅资料,上述源码有误,应该是:
@echo off
if exist "%systemroot%\notepad.exe" set Npath="%systemroot%
\notepad.exe %"1
if not exist "%systemroot%\notepad.exe" set Npath="%systemroot%
\system32\notepad.exe %"1
reg add "HKCR\txtfile\shell\open\command" /ve /d %Npath%
/t REG_SZ /f
reg add "HKCR\Applications\notepad.exe\shell\open\command"
/ve /d %Npath% /t REG_SZ /f
reg add "HKCR\SystemFileAssociations\text\shell\open\command"
/ve /d %Npath% /t REG_SZ /f
命令简单介绍:
if exist "%systemroot%\notepad.exe" set Npath="%systemroot%
\notepad.exe %"1
这句话是设置一个变量: Npath="%systemroot%\notepad.exe %"1,
这个变量将写入注册表.
HKCR\txtfile\shell\open\command
HKCR\Applications\notepad.exe\shell\open\command
HKCR\SystemFileAssociations\text\shell\open\command
下面显示注册表HKCR\txtfile\shell\open\command的情况:
%1 表示参数..
比如你想打开1.txt,就是用 命令:notepad 1.txt搞定。
这个方法算是解决了txt后缀文件打开方式出现两个文件夹的问题.
但是ini文件却没办法根据这个方法来解决.ini文件选择右键打开
也是出现两个记事本选项.
我们找到HKEY_CLASSES_ROOT\inifile\shell\open\command
这个项 ,发现只有一个一个数值:
按理说,他应该只有一个打开记事本才对啊.我们再去这个项下面看看:
HKEY_CURRENT_USER\Software\Microsoft\Windows\
CurrentVersion\Explorer\FileExts\.ini\OpenWithList
发现他是没有项目了.:
而下面的
HKEY_CURRENT_USER\Software\Microsoft\Windows\
CurrentVersion\Explorer\FileExts\.ini\OpenWithProgids
有一个项值: inifile..这说明了它是根据inifile 注册项来查找打开方式的.
这只能说明存在两种可能
①除了之前HKEY_CLASSES_ROOT\inifile项,还存在另一个inifile项。
经过查找,发现了这个
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\inifile
但是这里还是只有一个数据项,跟HKEY_CLASSES_ROOT\inifile的数据是一致的。
②那么就是第二种可能,还有别的.ini注册表 控制了这个后缀类型选择。
经过查找,有好几个.ini 项(就不全部列出来了)
1) HKEY_CLASSES_ROOT\.ini
原来是PerceivedType在作怪。它默认是text。
2)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
\Explorer\RecentDocs\.ini(没什么用)
3)
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.ini
它也默认是text
PerceivedType是说接受或者感知的类型 是注册表里的键值 
比如 在注册表中,只要有字符串值"PerceivedType"="text"这一个项目,
该文件的右键选择项中就会出现text的选择项。
这个text 就是对应着下面这一项:
HKEY_CLASSES_ROOT\SystemFileAssociations\text
还记得他吗?这就是上文在修改txt右键出现两个记事本的时候,修改的注册表项了。
他的值在上文已经设置过了,是”%systemroot%\notepad.exe” 见下表
这也就解释了为什么inf文件也有两个记事本了。见下图:
总结:
我们在设置txt后缀打开类型的时候,
设置了
HKEY_CLASSES_ROOT\SystemFileAssociations\text\shell\open\command
=%systemroot%\notepad.exe
这就导致text类型直接映射到c:\Windows\notepad.exe
这时候包括ini文件inf文件在内的所有PerceivedType=text的文件
类型映射到了c:\Windows\notepad.exe。
ini,inf文件的打开类型已经映射到了c:\Windows\System32\notepad.exe
这时候就会右键打开---出现两个记事本选项。。
解决的根本之道就是,将
HKEY_CLASSES_ROOT\SystemFileAssociations\text\shell\open\command
=%systemroot%\System32\notepad.exe
。。。
请使用命令:
@echo off
set Npath="%systemroot%\system32\notepad.exe %"1
reg add "HKCR\txtfile\shell\open\command" /ve /d %Npath% /t REG_SZ /f
reg add "HKCR\Applications\notepad.exe\shell\open\command"
/ve /d %Npath% /t REG_SZ /f
reg add "HKCR\SystemFileAssociations\text\shell\open\command"
/ve /d %Npath% /t REG_SZ /f
最后我们看看所谓的ini文件:
---end

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论