![最大的问题是,这安全吗?](https://linux22.com/image/1481789/%E6%9C%80%E5%A4%A7%E7%9A%84%E9%97%AE%E9%A2%98%E6%98%AF%EF%BC%8C%E8%BF%99%E5%AE%89%E5%85%A8%E5%90%97%EF%BC%9F.png)
有没有办法将另一个程序设置为打开文件夹或“我的电脑”时打开的默认程序?我想用另一个程序(例如 FreeCommander)替换 Windows 资源管理器。我尝试查看控制面板选项中的程序关联,但找不到打开文件夹的选项。
我认为某个地方的某个正则表达式可以做到这一点,但我不会手动去搜索。
答案1
总体而言,PHOENiX 的问题是正确的,但有一个问题。注册表项HKEY_CLASSES_ROOT\Folder
不仅涵盖目录,还涵盖各种特殊文件夹,例如控制面板等等。它们是 PHOENiX 所写的那些 GUID 字符串。如果您尝试在第三方文件管理器中打开这样的特殊文件夹,它很可能会失败,因此您将无法再使用这些文件夹。
你真正想要的是配置目录和驱动器以便在文件管理器中打开。有两个注册表项可用于此目的:
HKEY_CLASSES_ROOT\Directory
HKEY_CLASSES_ROOT\Drive
以下是将 Total Commander 设置为默认文件管理器的两个示例。单击(例如在“开始”菜单中)、双击(例如在桌面、Windows 文件资源管理器等上)、从其他应用程序打开等时,这两个示例都会导致在 Total Commander 的新选项卡中打开任何目录或驱动器。唯一的区别是第一个使用打开目录/驱动器上下文菜单中的项目,第二个是添加新项目在 Total Commander 中打开将 Total Commander 的图标添加到上下文菜单。
只需将下面的内容复制并粘贴到新文件中,为其添加.reg
扩展名并执行即可。当然,您需要确保 Total Commander 可执行文件的路径正确。
检查文档更多细节。
1. 使用默认设置打开物品
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Drive\shell]
@="open"
[HKEY_CLASSES_ROOT\Drive\shell\open\command]
@="\"C:\\Program Files\\totalcmd\\TOTALCMD64.EXE\" \"%1\" /T /O /S"
[HKEY_CLASSES_ROOT\Directory\shell]
@="open"
[HKEY_CLASSES_ROOT\Directory\shell\open\command]
@="C:\\Program Files\\totalcmd\\TOTALCMD64.EXE \"%1\" /T /O /S"
2. 添加新的上下文菜单项在 Total Commander 中打开
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Drive\shell]
@="TotalCommander"
[HKEY_CLASSES_ROOT\Drive\shell\TotalCommander]
@="Open in Total Commander"
[HKEY_CLASSES_ROOT\Drive\shell\TotalCommander\command]
@="\"C:\\Program Files\\totalcmd\\TOTALCMD64.EXE\" \"%1\" /T /O /S"
"Icon"="C:\\Program Files\\totalcmd\\TOTALCMD64.EXE,0"
[HKEY_CLASSES_ROOT\Directory\shell]
@="TotalCommander"
[HKEY_CLASSES_ROOT\Directory\shell\TotalCommander]
@="Open in Total Commander"
"Icon"="C:\\Program Files\\totalcmd\\TOTALCMD64.EXE,0"
[HKEY_CLASSES_ROOT\Directory\shell\TotalCommander\command]
@="C:\\Program Files\\totalcmd\\TOTALCMD64.EXE \"%1\" /T /O /S"
Total Commander 的命令行参数
上述例子中使用了 4 个命令行参数:
"%1"
:打开的目录/驱动器的路径,应放在引号中,以便正确处理带有空格字符的路径/O
:使用现有的 Total Commander 实例,而不是执行新的实例/T
:打开新选项卡,而不是重复使用当前活动选项卡/S
:打开的目录/驱动器将被视为源,因此它将在当前活动选项卡所在的面板中打开
检查文档了解更多参数。
答案2
通过比较将 Q-Dir 设置为文件资源管理器之前和之后的注册表与“附加功能”菜单中的选项,它实际执行的操作如下(因为该软件似乎不是开源的):
Key: HKEY_LOCAL_MACHINE\Software\Classes\Folder\shell
Change: Added Value
Value: *Q-Dir
Type: REG_SZ
Key: HKEY_LOCAL_MACHINE\Software\Classes\Folder\shell\*Q-Dir
Change: Added Key
Key: HKEY_LOCAL_MACHINE\Software\Classes\Folder\shell\*Q-Dir
Change: Added Value (Icon)
Value: C:\Program Files\Q-Dir\Q-Dir.exe
Type: REG_SZ
Key: HKEY_LOCAL_MACHINE\Software\Classes\Folder\shell\*Q-Dir\command
Change: Added Key
Key: HKEY_LOCAL_MACHINE\Software\Classes\Folder\shell\*Q-Dir\command
Change: Added Value
Value: "C:\Program Files\Q-Dir\Q-Dir.exe" /e>%L>%D>%1>%S>
Type: REG_SZ
它正在创建一个 shell 命令,该命令也会在上下文菜单中,但是,这个命令将是“默认”操作,因此如果你在 Windows 文件资源管理器中打开某个内容,它将在 Q-Dir 中打开。
第一个注册表更改将默认 shell 设置为新创建的*Q-Dir
shell 命令。
最后的注册表更改的值具有以下含义:
"C:\Program Files\Q-Dir\Q-Dir.exe"
/e>%L>%D>%1>%S>
--使用这些参数执行 Q-Dir.exe
>%L>%D>%1>%S>
是命令行变量,下面进一步解释:为上下文菜单编写 shell 命令时可以使用哪些特殊变量
但是,>
它们之间的 和/e
是 Q-Dir 特有的。Q-Dir 专门实现了一个/e
开关,它接受值,以便它可以>
根据优先级链中的需要进行拆分和使用。
最大的问题是,这安全吗?
我们不确定,但要谨慎行事。我已经注意到,shell 替换程序可能会提供一个参数,人们可能认为它是一个文件路径,但实际上它是一个奇怪的 GUID 字符串,例如格式为::{123E4567-E89B-12D3-A456-426614174000}\8\::{123E4567-E89B-12D3-A456-426614174000}
。例如,如果您在开始菜单中右键单击 -> 卸载应用程序,就会发生这种情况,通常会将其传递给资源管理器(默认 shell)并从那里处理。
处理此问题的一种方法是制作一个中间程序,该程序接受参数,确保它是文件路径,如果不是,则将参数传递给 explorer.exe,而不是打开真正需要的 shell。Q-Dir 等程序直接在其中编写了此程序或类似程序,因此 Q-Dir 不需要此程序。
答案3
不确定 FreeCommander,但是Q-Dir可以选择将该文件管理器设置为默认文件管理器:
但是,如果作为便携式应用程序运行,该设置有一些限制。例如,Win E启动 Windows 资源管理器,尽管有一个上下文菜单项可以使用 Q-Dir 打开文件夹。