TC-unpack(TC解压助手)是用来辅助TC(Total Commander)解压功能的一小段AutoHotkey脚本,用来在解压对话框中自动按键,功能有二:一是删除解压路径,以解压到当前目录;二是选中“Unpack each archive to a &separate subdir (name of the archive)”/“将各压缩包分别解压到同名的子文件夹中(&S)”项,以实现把文件名作为解压后的目录名。
在TC的中、英文论坛中,都常有网友建议自动解压到当前目录(而非对面窗口)、自动(或默认)解压到同名子目录,但TC并未实现此功能。这算是本程序的大背景。小背景则是新网友daizhaolin来信,提出了这一要求。
其实,我自己很懒,多数时候都是手工按键的。并且这样做有一个好处,就是能发现压缩包内是散着的N个文件,还是已经包含在一个目录中。如果是前者,则选建目录再解压入其中;如果是后者,则直接解压。但从我的观点来看,提倡压缩包内含目录。理由是,我们要提供一个完整解决方案,而非散乱的零部件。但是,遇到更懒(或称为更勤于追求自动化高效率)的网友,我仍愿意提供如下脚本。朋友们可自由借鉴、使用、指正、传播。
源代码1
下面是善用佳软作为ahk的不求深解者写的代码,特点是用最简单的ahk语句,完全模拟击键实现功能。(注:如下代码的高亮格式由gvim生成)
;主页:http://xbeta.info/tc-unpack.htm#singleinstance,force
SetTitleMatchMode, 2
;本段程序功能:在TC中,按alt+F9出现解压对话框后,自动清空解压目录,这样就解压到当前目录了。
!F9::
IfWinActive Total Commander
{
sendplay, !{F9}
WinWaitActive, Unpack files ;这是等待解压对话框出现,如果是中文版本,应该把Unpack files换为对应的中文窗口标题,或换为 ahk_class TDLGUNZIPALL
send, {del}
;send, {enter}
;如果你想自动按下回车,请取消上一行的注释。后果自负!
}
else
sendplay, !{F9} ;保证在其他程序中,不影响Alt+F9的正常功能。
return
;本段程序功能:在TC中,按ctrl+alt+F9出现解压对话框后,自动清空解压目录,自动选中“Unpack each archive to a &separate subdir (name of the archive)”。语句基本同上。
^!F9::
IfWinActive Total Commander
{
sendplay, !{F9}
WinWaitActive, Unpack files
send, {del}
send, !s ;自动按下alt+s,让TC选中该选项
;send, {enter}
}
else
sendplay, ^!{F9}
return
源代码2
以下是Jameson给出的ahk代码,更通用,更可靠,效率也更高。
说明1:下述代码及Jameson留言中的“PostMessage, 0×111”,0与111之间是字母x(xbeta的x),而不是其他符号。复制代码后请注意替换,以免WordPress自动转换的影响。
说明2:我试用如下代码未能执行,或许是postmessage中 control id不同的原因。我在中文XP SP2下,用官方标准的Total Commander 7.04a 英文版,control id为4,可以正常运行。
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#singleinstance force
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.#IfWinActive ahk_class TTOTAL_CMD ;这一句的作用是,当 TC 激活时热键才生效。用类名判断,通用性比较好,中英文界面都可以。
!F9::
;~ send, !{F9}
PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD ;发送消息解压消息,同样是因为通用性比较好,不受快捷键的限制。
return
msgbox,1
WinWaitActive, ahk_class TDLGUNZIPALL,, 1 ;如果选择的是不能解压的文件会弹出错误窗口,限制等待时间为 1 秒,如果等不到解压窗口就退出。
If ErrorLevel
{
Return
}
Else
{
controlSend,, {Del}, ahk_class TDLGUNZIPALL
}
;send, {enter}
Return
^!F9::
;~ sendplay, !{F9}
PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD
WinWaitActive, ahk_class TDLGUNZIPALL,, 1
If ErrorLevel
{
Return
}
Else
{
controlSend,, {Del}, ahk_class TDLGUNZIPALL
Send, !S
}
;send, {enter}
Return
说明
如果你有AutoHotkey的基本知识,并且安装了AutoHotkey,看过了上述说明,就可以使用tc-unpack.ahk了。阅读TC学堂第3讲:压缩及插件、善用佳软AutoHotkey系列文章也会帮你了解更多技巧。
《 “TC-unpack.ahk:TC解压助手 v0.9” 》 有 18 条评论
第一行的参数可以换为 ignore
怎么都直接发送热键……
欢迎天堂之门指正。我对AutoHotkey没有多少研究,只会用最简单的语句,完成工作了事。
你来一个改进版吧。这样也能让大家学到更多AutoHotkey知识。
嗯……原来写过更通用的解压类脚本,目的是为了能在解压的时候自动判断目录结构,移除多余的目录。
地址在:http://ahk.5d6d.com/viewthread.php?tid=359
不是利用的 TC 的解压功能。说起来我现在很少用 TC 呵呵。
所以,抱歉,我不去跟进:-P
下面的 Jameson 似乎比较有心,你可以和他交流吧。
最后说一下,我上面给出的那个脚本,在 TC 里用的时候,需要再对最后部分的那行刷新用的命令做一下调整,资源管理器里用 F5 刷新,到了 TC 里就不同了。
要这何用,TC难道不能解压缩?
又见老朋友,支持一下:)
我稍微修改了一下,不知道有没有错误,大家试试。
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#singleinstance force
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#IfWinActive ahk_class TTOTAL_CMD ;这一句的作用是,当 TC 激活时热键才生效。用类名判断,通用性比较好,中英文界面都可以。
!F9::
;~ send, !{F9}
PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD ;发送消息解压消息,同样是因为通用性比较好,不受快捷键的限制。
WinWaitActive, ahk_class TDLGUNZIPALL,, 1 ;如果选择的是不能解压的文件会弹出错误窗口,限制等待时间为 1 秒,如果等不到解压窗口就退出。
If ErrorLevel
{
Return
}
Else
{
Send, {Del}
}
;send, {enter}
Return
^!F9::
;~ sendplay, !{F9}
PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD
WinWaitActive, Uahk_class TDLGUNZIPALL,, 1
If ErrorLevel
{
Return
}
Else
{
Send, {Del}
Send, !S
}
;send, {enter}
Return
Send, {Del}
因为和热键 alt+ctrl+F9 组合容易打开任务管理器。
所以改成
controlSend,, {Del}, ahk_class TDLGUNZIPALL
PS:
WinWaitActive, Uahk_class TDLGUNZIPALL,, 1
这句多了个U。。。
WinWaitActive, ahk_class TDLGUNZIPALL,, 1
才对
一是删除解压路径,以解压到当前目录:
这个需求只用alt+F9然后 backspace,就可以拉.
最好是变通一下,让tc解压光标处的压缩文件
变成tc的em命令,可添加到tc菜单里……
这种监视得让ahk一直运行着,不爽……
我靠,这个功能tc有快捷键啊~~-。-!
善用佳软:
你好!两问题请教于你:①如何将TC的一个文件名设置成两种颜色(并非奇数行和偶数行分开设置),如TC-unpackaa,将后面的”aa”设置成另一种颜色。能设置吗?如何设置?②此外,如何设置TC菜单背景颜色和文字颜色?望能不吝赐教。谢谢!
【善用佳软/2008-10-20:①好象不能;②如果指菜单,则TC采用的windows设置,并不能为TC单独设置】
善用佳软:
你好!谢谢你及时的指导。再向你请教极点五笔的两个问题。①如何将极点6.3版的词典和词库安装到5.2版?②极点5.2标准版和5.2增强版有何区别?再次谢谢你!
【善用佳软/2008-10-20:这两个问题我都没有能力直接回答。你可以到 五笔爱好者论坛 查阅,或google之】
TC的7zip插件的语言文件该如何使用呢? 搜了半天也没搜到。 烦请告知。谢谢。
①我没装此插件;
②下载插件包发现有readme,其中写着:
3. Translation
————–
To use selected translation from lang/ copy it to 7zip.lng file into 7zip.wcx
installation folder.
Note for translators: On OS suppor……
有价值的信息,先要到可能的源头去找,其次才是搜索。
谢谢!已经解决。。
请问,在TC学堂看的,可以更改文件颜色,>两天内和>七天内,可如果我添加这两个选项的话,两天内的颜色就不会出现,只出现的是七天内的了?这是什么问题?
调整一下优先级
请教:
没有加密的RAR文件在TC下可以双击打开查看。
可我有一些是加密文件名的RAR文件,双击后并没有提示输入密码,而是进入空白区域,这是否能解决呢?烦请解答!谢谢!