无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4864|回复: 9
打印 上一主题 下一主题

“打开/另存为”对话框位置栏修改器

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-14 23:46:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  当我们使用诸如记事本、word之类的软件菜单栏里的“打开”或“另存为”按钮的时候,系统会弹出一个对话框让大家定位文件路径。为了快速定位到一些常用的位置,微软在对话框的左侧为大家准备了5个常用路径,分别是:我最近的文档、桌面、我的文档、我的电脑、网上邻居。

  按理说,微软的这个设计是比较贴心的。可是,每个用户都有自己独特的操纵习惯,经常打开的路径是千差万别的,而微软并没有在前台界面开放重设这5个路径的功能,需要通过各种各样的工具软件深入注册表内部做调整。目前网上有这个功能的工具软件较为罕见,于是萌发了用批处理做一个调整“打开/另存为”对话框位置栏工具的念头。经过一番摸索,得到了以下代码,发出来共享之。

  这个批处理具有如下功能:

  1、自行指定“打开/另存为”对话框位置栏的路径;
  2、重新调整自行指定路径的顺序

  使用这个批处理调整前后效果对比:
   


  支持多种输入方式:



  注意事项:

  1、最多只能修改5个路径;
  2、若系统是XP_SP1或XP_SP2,系统自带的reg.exe在查询中文路径的时候,会出现“吃字”现象,请用附件中的reg.exe替换之,或放在批处理的相同目录下使用;若不知道reg.exe“吃字”是怎么回事,请阅读这篇文章:reg requery查询注册表时中文路径会"吃掉"最后的字符?http://www.cn-dos.net/forum/viewthread.php?tid=22202
  3、代码没有做全面的容错检测,请严格按照提示操作,否则,将不能正确修改路径。
  1. @echo off

  2. :: Code by namejm 2009.3.12 Modified on 2009.3.13
  3. :: 不支持带感叹号的路径
  4. :: 争取对默认设置的次序进行重排

  5. set TT="打开/另存为"对话框位置栏修改器
  6. title %TT%
  7. mode con lines=25 cols=70
  8. setlocal enabledelayedexpansion
  9. set RegPath=HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32

  10. :Main
  11. cls
  12. for /f "delims==" %%i in ('set place 2^>nul') do set "%%i="
  13. set custom=
  14. for /f "skip=4 tokens=1,2*" %%i in ('reg query %RegPath%\Placesbar 2^>nul') do (
  15.     set custom=yes
  16.     set "%%i=%%k"
  17. )

  18. :ShowConfigDefault
  19. title %TT%-默认设置
  20. if not defined custom (
  21.     echo.&echo                     当前使用的是系统默认的设置
  22.     echo  ____________________________________________________________________
  23.     echo.&echo                         位置序号 对应的路径
  24.     echo                    ——————————————
  25.     echo                            1    我最近的文档
  26.     echo                            2    桌面
  27.     echo                            3    我的文档
  28.     echo                            4    我的电脑
  29.     echo                            5    网上邻居
  30.     echo                    ——————————————
  31.     echo                      建议自行设置更合理的位置
  32.     echo.&echo.
  33.     echo.
  34.     echo          退出请按 0                            全新设置请按 1
  35.     echo  ____________________________________________________________________
  36.     echo.
  37.     set choice=
  38.     set /p choice=                      请输入功能代码(0/1):
  39.     if not defined choice (
  40.         goto Main
  41.     ) else (
  42.         if "!choice!"=="0" exit
  43.         if "!choice!"=="1" goto SetNew
  44.     )
  45.     goto ShowConfigDefault
  46. )

  47. :ShowConfigCustom
  48. title %TT%-自定义设置
  49. cls
  50. echo.&echo                     当前使用的是用户自定义设置
  51. echo  ____________________________________________________________________
  52. echo.&echo                         位置序号 对应的路径
  53. echo                  ——————————————————
  54. set num=0
  55. for /f "delims==" %%i in ('set path_ 2^>nul') do set "%%i="
  56. for /f "tokens=1* delims==" %%i in ('set place') do (
  57.     set /a num+=1
  58.     set "path_!num!=%%~j"
  59.     echo                            !num!         "%%~j"
  60. )
  61. echo                  ——————————————————
  62. echo.&echo.&echo.
  63. echo             退出请按 0                      恢复默认设置请 1
  64. echo  ____________________________________________________________________
  65. echo.
  66. echo           调整当前设置的顺序请按 2        重新设置新路径请按 3
  67. echo.
  68. set choice=
  69. set /p choice=                请输入功能代码(0/1/2/3):
  70. if not defined choice (
  71.     goto ShowConfigCustom
  72. ) else (
  73.     if "%choice%"=="0" exit
  74.     if "%choice%"=="1" reg delete %RegPath% /f>nul&goto Main
  75.     if "%choice%"=="2" goto SortConfig
  76.     if "%choice%"=="3" goto SetNew
  77. )
  78. goto ShowConfigCustom

  79. :SortConfig
  80. title %TT%-调整顺序
  81. cls
  82. echo.&echo                              自定义位置的顺序
  83. echo  ____________________________________________________________________
  84. echo.&echo                         位置序号 对应的路径
  85. echo                  ——————————————————
  86. for /f "tokens=2* delims=_=" %%i in ('set path_') do (
  87.     set "str=%%j"
  88.     echo                            %%i     "!str!"
  89. )
  90. echo                  ——————————————————
  91. echo.&echo  ____________________________________________________________________
  92. echo.
  93. echo                若要调整自定义位置的当前顺序,请按照以下步骤操作:
  94. echo.&echo                重新排列 1~%num% 这%num%个数字,并以空格分隔
  95. echo.&echo                重排后的数字顺序就是新的路径顺序
  96. echo.
  97. set order=
  98. set /p order=        请依次输入重排后的数字,并以空格分隔(退出请按0):
  99. if not defined order goto SortConfig
  100. if "%order%"=="0" exit
  101. set /a num1=0

  102. :: 需要对形如 c:\ 的路径做特别处理
  103. for %%i in (%order%) do (
  104.     if %%i gtr %num% goto SortConfig
  105.     set /a num2=%%i-1
  106.     call set "var=%%place!num2!%%"
  107.     if "!var:~-1!"=="" set "var=!var!"
  108.     set "str!num1!=!var!"
  109.     set /a num1+=1
  110. )

  111. set /a num-=1
  112. reg delete %RegPath%\Placesbar /f>nul
  113. for /l %%i in (0,1,%num%) do (
  114.     reg add %RegPath%\Placesbar /v place%%i /t REG_SZ /d "!str%%i!">nul
  115. )
  116. echo.&pause
  117. goto Main

  118. :SetNew
  119. title %TT%-指定新路径
  120. cls
  121. reg delete %RegPath% /f>nul 2>nul
  122. echo.&echo                          请指定新的路径
  123. echo  ____________________________________________________________________
  124. echo.&echo        注意事项:
  125. echo                ① 不能输入不存在的路径
  126. echo                ② 若只输入盘符,一定要以两条反斜杠结束,
  127. echo            比如:c:\\
  128. echo                ③ 若输入的是路径,结尾部分不能带任何反
  129. echo            斜杠,比如:c:\test
  130. echo                ④ 最多只能输入5条路径
  131. echo        小技巧:① 可以把文件夹直接拖曳到本窗口
  132. echo                ② 输入的内容可以是类标识符(CLSID),
  133. echo            但是需要在类标识符前加双冒号::
  134. echo         ————————————————————————
  135. echo.
  136. set num=0
  137. for /f "delims==" %%i in ('set str 2^>nul') do set "%%i="
  138. for /l %%i in (1,1,5) do (
  139.     set /p str%%i=        请输入第%%i个路径(直接回车将结束输入):
  140.     if defined str%%i (
  141.         set /a num+=1
  142.         set "str%%i=!str%%i:"=!"
  143.     ) else goto ChangePath
  144. )

  145. :ChangePath
  146. echo  ____________________________________________________________________
  147. set num1=0
  148. for /l %%i in (1,1,%num%) do (
  149.     reg add %RegPath%\Placesbar /v place!num1! /t REG_SZ /d "!str%%i!">nul
  150.     set /a num1+=1
  151. )
  152. echo.&pause
  153. goto Main
复制代码

[ 本帖最后由 namejm 于 2009-3-15 08:58 编辑 ]

XP_SP3下的reg命令行程序.rar

19.08 KB, 下载次数: 177, 下载积分: 无忧币 -2

解决了reg query语句会“吃字”的bug

2#
发表于 2009-3-15 02:10:22 | 只看该作者
看不到图,只有XX,传到那个论坛也看不到,因为没有在那里注册,楼主或版主对这帖处理一下,直接帖图,不要用链接,否则很多人看不到图,没有有不知效果如何,"精而无效"。
回复

使用道具 举报

3#
发表于 2009-3-15 02:21:10 | 只看该作者
看不到图。不知道是什么效果?
回复

使用道具 举报

4#
 楼主| 发表于 2009-3-15 08:59:37 | 只看该作者
  本来想在我的论坛更新的时候不用再到这里来更新,可惜图片在这里没法正常显示,已经在顶楼更新了图片。
回复

使用道具 举报

5#
发表于 2009-3-15 09:15:18 | 只看该作者
作为一个CMD批处理,能修改“打开/另存为”对话框初始化位置,的确可精。
但要用CMD调出“打开/另存为”对话框不是一般人能做到的,不知楼主有没有CMD批处理调出“打开/另存为”对话框的方法?
如果在程序中用微软的API调出“打开/另存为”对话框,可以通过参数直接定位到想要的位置,PECMD.EXE 的 BROW 命令就是这样:

┣━━━┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃      │格式│BROW <变量名>,[[*|&]初始路径],[提示文字],[扩展名]                                           ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │功能│浏览磁盘文件和目录。                                                                        ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │参数│■变量名  : 用于保存浏览结果的变量名。                                                      ┃
┃      │    │■初始路径: 为浏览窗口默认选中的文件或目录,省略该参数时定位到系统默认的路径;前导符"*"为浏
┃'BROW'│    │            览目录对话框,前导符"&"为保存文件对话框,省略前导符为打开文件对话框。           ┃
┃      │    │■提示文字: 可以省略,省略时默认的文字为系统默认的文字提示。                                ┃
┃      │    │■扩展名  : 浏览指定扩展名的文件,省略表示所有文件。                                        ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │示例│BROW Boot_Ini,C:\Windiws\BOOT.INI,请选择一个文件,INI 或 BROW Tag,*C:\Windiws,请选择一个目录 ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │备注│※本命令会打开一个文件目录浏览对话窗,让用户浏览磁盘文件目录,用户可选择某个文件或目录。    ┃
┃      │    │※选择结果将保存在指定的进程环境变量中。示例2可通过环境变量 %Tag% 来引用。                  ┃
┃      │    │※BROW命令必须在INIT命令之后或在桌面执行。                                                  ┃
┣━━━┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫


[ 本帖最后由 lxl1638 于 2009-3-15 09:16 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2009-3-15 15:09:27 | 只看该作者
  用cmd调出“打开/另存为”对话框,并定位到指定位置,据我所知,目前尚难以办到,不过,如果只是打开指定的文件夹的话,用 start "" "%windir%" 这条命令就可以办到,只是不能通过“打开/另存为”对话框来定位而已。
回复

使用道具 举报

7#
发表于 2009-3-15 17:09:40 | 只看该作者
BAT真是妙极了,不过单单一个文件的话,输入路径就比较有点麻烦。
这里发一个EXE程序。以便研究.

对话框位置栏设置.rar

16.42 KB, 下载次数: 135, 下载积分: 无忧币 -2

回复

使用道具 举报

8#
 楼主| 发表于 2009-3-15 17:15:55 | 只看该作者
  输入路径支持拖曳方式,在输入路径的界面中有提示的。不过批处理也只能这样了,点选方式是没法支持的。
回复

使用道具 举报

9#
发表于 2009-3-15 17:27:01 | 只看该作者
好东西,谢谢楼主分享!
回复

使用道具 举报

10#
发表于 2009-3-16 09:09:13 | 只看该作者
用wfile,可以实现点选方式吧.

Wfile.rar

4.96 KB, 下载次数: 102, 下载积分: 无忧币 -2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-28 00:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表