转载请注明出处
为你的TC工具栏增加下拉功能-TCMenu的使用方法
如果你还没用过Total Commander, 请去 http://www.ghisler.com 下载最新版并试用.
零. 一个简单的工具栏定义文件为了了解TCMenu的工作机制, 我们首先考察一下TC的工具栏文件的格式. 下面是一个示例工具栏文件Sample.bar
Quote:
[Buttonbar]
Buttoncount=2
button1=%windir%\system32\notepad.exe
cmd1=%windir%\system32\notepad.exe
param1=%p%n
path1=%windir%
menu1=Notepad
button2=%windir%\system32\mspaint.exe
cmd2=%windir%\system32\mspaint.exe
param2=?%A
path2=%windir%
menu2=Paint Brush
第一行
[Buttonbar]表示这是一个工具栏定义文件
第二行
Buttoncount=2表示该工具栏共有2个按钮
后面的内容定义了工具栏上的每个按钮,
[button,cmd,param,path,menu]<i>=<content>表示第<i>个按钮的[图标/命令/参数/路径/提示]为<content>
比如, 第二个按钮的参数为
?%p%n, 表示按该按钮会弹出提示用户输入参数的输入框, 框内的默认内容为%p%n, 即当前选择的文件的带路径全名, 点击效果如图:
关于按钮的参数设置, 可以查看TC的文档
一. TCMenu的命令行格式下面进入正题. 首先看一下TCMenu的用法:
TCMenu.exe <BarFile Path> [<Parameter String> <Parameter String> ...] [-$]
其中,
<BarFile Path>表示需要TCMenu导入的工具栏文件的地址
<Parameter String>表示形如
Quote:
-<c> <Replace String>
的字符串, 其中
<c>为任意单字符,
<Replace String>为任意
不含空格的字符串
或包含在引号内的含空格字符串
[]内是非必须内容
二. TCMenu的工作方式TCMenu运行时, 首先读取<BarFile Path>指定的*.bar文件, 搜索文件中出现在
param<i>=后的字符串中有没有
%<c>, 如果有, 就将
%<c>"替换"为相应的
<Replace String>.
比如TC的一个按钮被定义为
Quote:
button1=TCMenu.exe
cmd1=TCMenu.exe
param1=%commander_path%\MyBar\sample.bar -p %p -n %n -A %p%n
path1=%commander_path%\plug_in\exe\tcmenu\
menu1=Example Dropdown
按该按钮时, TC首先将
%p转换为source panel的目录, 比如
c:\windows\;
%n转换为source panel的选定文件, 比如
windowsxp.bmp,
%commander_path%换为TC所在目录, 比如
d:\app\totalcmd, 然后调用TCMenu. 所以事实上执行的是:
TCMenu.exe d:\app\totalcmd\mybar\sample.bar -p c:\windows\ -n window~1.bmp -A c:\windows\window~1.bmp
这样的调用方式表示, 所有出现在sample.bar参数行(即param<i>=)中的
%p会被替换为
c:\windows\,
%n会被替换为
window~1.bmp,
%A会被替换为
c:\windows\window~1.bmp这里有一个小技巧是, 通过TCMenu调用toolbar时, toolbar中的button的运行参数可以设定为诸如%A这样并非TC内禀的变量--如果直接在某个button的参数中输入%A, 并从TC运行, 则会出错, 但通过TCMenu调用时, %A被替换为自定义的%p%n
三. TCMenu 特殊参数i. 特殊参数
-$参数
-$表示使用小图标显示弹出菜单. TCMenu默认使用大图标.
比如:
TCMenu.exe sample.bar -A %p%n -$ii. 特殊参数
?在
<Parameter String>中插入"?"能提供用户自定义Button参数的途径, 比如, 对于
-A %p%n?Hello这样一个
<Parameter String>, 点击弹出菜单中任意一个参数中包括
%A的按钮时, 会有一个输入框弹出, 默认内容为
?前的内容,
?后的内容作为该对话框的提示内容
比如:
参数
..\..\..\my\dropdown\editors.bar -p %p -n %o.%e?Hello -$对应的弹出窗口为:
按作者的说法, 如果需要使用带空格的提示内容, 则需要用引号将之括起. 不过我发觉行不通, 有兴趣的可以把上面的
Hello改为
"Hello World" (带引号)试试.
另外, 提示内容也不能是中文
四. 环境变量与TCMenu特殊变量i. 向TCMenu.exe 传递的参数
1 以及 经由TCMenu调用的Toolbar的Button的
param<i>=部分
2 (让我喘口气先^^)中可以有环境变量, 但要用两个
%%括起(而不是一般的单个
%), 比如:
-x %%windir%% 表示将所有的
%x转换为系统的
%windir%变量(即windows的目录)
特别地, 如果环境变量本身在展开后带空格, 那么还需要用引号
"将它括起 (而事实是在我机器上, 这个功能和前面的带空格提示一样不能用)
而经由TCMenu调用的Toolbar的Button的
cmd<i>=部分中的环境变量只需用一个
%括起(就与一般的toolbar定义无异)
ii. TCMenu的内禀时间变量:
%0 - hours
%1 - minutes
%2 - seconds
%3 - day of month
%4 - month
%5 - year
%6 - day of week
%7 - month name
比如, 今天运行:
cmd.exe /c md c:\Backup_%3-%7-%5将在C的根目录下建立
Backup_24-03-04这样的目录
当然, 这个命令所在的toolbar必须由TCMenu调用, 否则这些变量不起作用