none
扩展名和文件类型如何在注册表注册? RRS feed

  • 问题

  • 我想完成以下功能:

    1. 资源管理器里右击,新建,有“新建TeX源文件”的选项
    2. 点击此选项,能新建一个有内容的新文件,扩展名为.tex。(用FileName好了)
    3. .tex文件的图标的路径是“D:\tex.ico”
    4. .tex文件的打开方式是"D:\Program Files (x86)\Vim\vim73\gvim.exe"
    5. 资源管理器里显示.tex的文件类型是TeX源文件。

     

    我很想自己完成,但在第1、2、3、5步都遇到了困难。

    第1步,按http://windowsxp.mvps.org/shellnewadd.htm 做,无效。我只是重启了explorer进程。

    第3步,修改HKEY_CLASSES_ROOT\texfile\DefaultIcon的默认值,无效。

     

    现在因为我已经尝试过,但我已经删除了.tex项和texfile项,但.tex文件的打开方式还是gvim,这是怎么回事??

     

    另外我还想知道,每一次修改后,如何使修改反映出来???听说Windows有图标缓存,要不要清空?必须重启explorer吗?还是注销账户再进?还是重启计算机?

     

    几乎崩溃了!!!

    2011年10月7日 14:37

答案

  • 我在之前写过一篇博文时介绍如何解除文件类型关联的,希望能给你一些启发或者能对你有点儿帮助 :)

    http://blog.sina.com.cn/s/blog_5773dd910100ewxw.html


    Eric - Microsoft MVP for Windows Expert - IT Pro

    微软全球 Springboard 系列技术专家组(STEP)成员

    访问 IN2Windows 技术博客

    2011年10月8日 9:40
    版主
  • Windows资源管理器菜单“新建”子菜单添加文件创建命令时,该文件必须具备关联的文件类型。得在注册表中注册的文件名下面添加一个叫ShellNew的子键。“新建”菜单中这条命令的名称就是分配给该文件类型处理程序的ProgID的描述性语句,例如“Microsoft Word 文档”。如果没有对应的处理程序,那么默认显示的是该文件后缀所关联的文件类型的名称。

    为了定义文件创建方法,您可以向ShellNew子键指定一个或多个值。可用的键值如下表列举:

    ShellNew 子键键值

    说明

    Command

    执行一个程序。REG_SZ 类型。指定可执行程序路径。

    Data

    创建一个包含指定数据的文件。REG_BINARY类型。用以指定要写入文件的数据内容。当指定了NullFile或者FileName时,Data会被忽略。

    FileName

    创建一个指定文件的副本。REG_SZ类型。指定被副本文件的完整路径。

    NullFile

    创建一个空文件。NullFile 不要指定任何值,请留空。如果NullFile被指定DataFileName都会被忽略。

         

    以下的注册表范例展示了一个在“新建”子菜单中创建.test类型文件的条目。它具备一个命令指向MyProgram应用程序。

    HKEY_CLASSES_ROOT

       .test

          (Default) = MyProgram.1 .test键默认键值)

          MyProgram.1 .test键的子键)

             ShellNew .test键的二级子键)

              NullFile  (二级子键ShellNew的键值)

    创建之后,当您点击“新建-My Program Application”时,Shell会创建一个名为“新建 MyProgram Application.test”的文件并传递给MyProgram.exe.

     

    您也可以看看HKEY_CLASSES_ROOT下面的.txt,参考一下。.txt键默认就没有类似“MyProgram.1”的子键,而是直接创建的ShellNew。您在安装一些程序后,例如,Office 2010,可以再参考一下,就有“Word.Document.12”,ShellNew是它的子键,而且其键值就一个NullFile

    最简单的自定义法就是创建一个.xxx文件类型,然后ShellNew,然后NullFile。当然,前提是上面说过的必须已经创建了文件类型关联。创建文件类型关联也比较简单,就是在您创建HKEY_CLASSES_ROOT\.test时,再创建(注册)一个自定义文件类型,例如随便起个名叫testfile,那就得再创建一个HKEY_CLASSES_ROOT\testfile,并且其默认键值填写testfile。最后以管理员身份运行cmd,执行命令

    assoc .test=testfile

    就可以了。Shell的更改必须得重启explorer进程才能生效哦。给您解答时我都是做过虚机试验的哦~


    Eric - Microsoft MVP for Windows Expert - IT Pro

    微软全球 Springboard 系列技术专家组(STEP)成员

    访问 IN2Windows 技术博客


    2011年10月9日 7:52
    版主

全部回复

  • 我在之前写过一篇博文时介绍如何解除文件类型关联的,希望能给你一些启发或者能对你有点儿帮助 :)

    http://blog.sina.com.cn/s/blog_5773dd910100ewxw.html


    Eric - Microsoft MVP for Windows Expert - IT Pro

    微软全球 Springboard 系列技术专家组(STEP)成员

    访问 IN2Windows 技术博客

    2011年10月8日 9:40
    版主
  • 請檢查你當前用戶的註冊表項是否存在

    HKCU\SOFTWARE\Classes\.tex
    HKCU\SOFTWARE\Classes\tex_auto_file

    如果存在請重命名或刪除這兩個註冊表項.


    Folding@Home
    2011年10月8日 9:46
  • 按照Eric Sheh的方法,我已经成功删除了tex的文件关联,tex文件的图标是白色的了。

     

    但我仍然无法完成第一步。这是我导出的注册表项,您看问题在哪?

     

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\.tex\ShellNew]
    "NullFile"=""


    2011年10月9日 4:30
  • 部分文件擴展需要在 %windir%\shellnew 目錄中放置一個空白文件, 同時在註冊表 HKCR\.擴展名\文件類型\shellnew 的 filename 指定那個空白文件名(包含主文件名和擴展名), HKCR\文件類型\shell\new\command 默認值中指定用於打開該文件的命令行設置
    我建議你可以比照系統已有文件類型的註冊表設置進行添加.

    至於如何獲得已存在擴展名對應的文件類型可以通過在命令提示符執行

    assoc .demo
    .demo=demofile

    其中 .demo 為擴展名, demofile 即為文件類型, 將其帶入到

    HKCR\.demo\demofile\shellnew
    HKCR\demofile\shell\new\command

    就可以獲得相關註冊表設置.


    Folding@Home
    2011年10月9日 6:30
  • Windows资源管理器菜单“新建”子菜单添加文件创建命令时,该文件必须具备关联的文件类型。得在注册表中注册的文件名下面添加一个叫ShellNew的子键。“新建”菜单中这条命令的名称就是分配给该文件类型处理程序的ProgID的描述性语句,例如“Microsoft Word 文档”。如果没有对应的处理程序,那么默认显示的是该文件后缀所关联的文件类型的名称。

    为了定义文件创建方法,您可以向ShellNew子键指定一个或多个值。可用的键值如下表列举:

    ShellNew 子键键值

    说明

    Command

    执行一个程序。REG_SZ 类型。指定可执行程序路径。

    Data

    创建一个包含指定数据的文件。REG_BINARY类型。用以指定要写入文件的数据内容。当指定了NullFile或者FileName时,Data会被忽略。

    FileName

    创建一个指定文件的副本。REG_SZ类型。指定被副本文件的完整路径。

    NullFile

    创建一个空文件。NullFile 不要指定任何值,请留空。如果NullFile被指定DataFileName都会被忽略。

         

    以下的注册表范例展示了一个在“新建”子菜单中创建.test类型文件的条目。它具备一个命令指向MyProgram应用程序。

    HKEY_CLASSES_ROOT

       .test

          (Default) = MyProgram.1 .test键默认键值)

          MyProgram.1 .test键的子键)

             ShellNew .test键的二级子键)

              NullFile  (二级子键ShellNew的键值)

    创建之后,当您点击“新建-My Program Application”时,Shell会创建一个名为“新建 MyProgram Application.test”的文件并传递给MyProgram.exe.

     

    您也可以看看HKEY_CLASSES_ROOT下面的.txt,参考一下。.txt键默认就没有类似“MyProgram.1”的子键,而是直接创建的ShellNew。您在安装一些程序后,例如,Office 2010,可以再参考一下,就有“Word.Document.12”,ShellNew是它的子键,而且其键值就一个NullFile

    最简单的自定义法就是创建一个.xxx文件类型,然后ShellNew,然后NullFile。当然,前提是上面说过的必须已经创建了文件类型关联。创建文件类型关联也比较简单,就是在您创建HKEY_CLASSES_ROOT\.test时,再创建(注册)一个自定义文件类型,例如随便起个名叫testfile,那就得再创建一个HKEY_CLASSES_ROOT\testfile,并且其默认键值填写testfile。最后以管理员身份运行cmd,执行命令

    assoc .test=testfile

    就可以了。Shell的更改必须得重启explorer进程才能生效哦。给您解答时我都是做过虚机试验的哦~


    Eric - Microsoft MVP for Windows Expert - IT Pro

    微软全球 Springboard 系列技术专家组(STEP)成员

    访问 IN2Windows 技术博客


    2011年10月9日 7:52
    版主
  • 最简单的自定义法就是创建一个.xxx文件类型,然后ShellNew,然后NullFile。当然,前提是上面说过的必须已经创建了文件类型关联。创建文件类型关联也比较简单,就是在您创建HKEY_CLASSES_ROOT\.test时,再创建(注册)一个自定义文件类型,例如随便起个名叫testfile,那就得再创建一个HKEY_CLASSES_ROOT\testfile,并且其默认键值填写testfile。最后以管理员身份运行cmd,执行命令
    assoc .test=testfile

    就可以了。Shell的更改必须得重启explorer进程才能生效哦。给您解答时我都是做过虚机试验的哦~


    按照这些做,我成功了。

    我在博客里写了篇文章整理了这些过程:《如何修改扩展名对应的图标,如何在新建菜单中加入新项?》

    2011年10月10日 3:05
  • 感谢您的积极分享~

    Eric - Microsoft MVP for Windows Expert - IT Pro

    微软全球 Springboard 系列技术专家组(STEP)成员

    访问 IN2Windows 技术博客

    2011年10月10日 3:28
    版主