2007年7月12日星期四

采用Total Commander打开目录

虽然有些新手觉得Total Commander跟Windows Explorer风格差异太大而不容易上手,但这对我并不是一个问题,因为我用它已经有七八年了。我现在基本不用Explorer。加上最近不知道为啥我的Explorer打开特别慢,就更不爱用它。

机器上装了Google Desktop,对于找到的文件,它提供了一个"打开文件夹"的功能,但很不爽的是,它总用Explorer打开。忍受不下去了,我开始想在它在Total Commander中打开。

到Google Desktop的安装目录和它的注册表中看了一下,没什么可以配置的。
然后上Google Desktop网站,想找一个可以设置这个的插件什么的,也没有。

猜想它是调用ShellExecute来打开的,接着就试图修改注册表中"目录(Directory)"和"文件夹(Folder)"的关联: HKCR\Directory\shell\下并没有open动作, 我添加了并设置命令为C:\Totalcmd\totalcmd.exe /O "%1"之后,ShellExecute(...,"open", ...)没有什么变化,会返回5(ERROR_ACCESS_DENIED),恢复原来的就可以正常打开,奇怪; 修改HKCR\Folder\shell\open\command的值再试却没反应。

某天发现Directory Opus这个软件可以跟Windows系统集成,接管文件夹的打开操作,就安装了一个试用版本,发现它是这样的:
1. 先给HKCR\Directory\shell\下添加一个动作dopus(再下面command键值设置为dopus的命令行)
2. 将HKCR\Directory\shell的缺省值由none改为dopus,这样它的缺省动作就是dopus了
(对于Folder也同样设置。Folder是文件夹,包含Directory和其它一些不跟实际文件系统目录对应的)

俺照猫画虎,添加了一个wincmd动作,将Directory的缺省动作设置为wincmd,再试,搞定!

转成注册表操作就是如下:
[HKEY_CLASSES_ROOT\Directory\shell]
@="wincmd"
[HKEY_CLASSES_ROOT\Directory\shell\wincmd]
@="Open in Total Commander"
[HKEY_CLASSES_ROOT\Directory\shell\wincmd\command] @="C:\\Totalcmd\\totalcmd.exe /O \"%1\""

补充说明:
1. 这只对ShellExecute时没有指定第二个参数(动作)时是可行的,而Google Desktop恰恰是这样,"运行"对话框也是。但如果它指定了动作是"open",那就只会走open动作了
2. HKCR\Folder\shell\command的值是REG_EXPAND_SZ格式而不是通常的REG_SZ(字符串)格式,奇怪

没有评论: