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系列文章也会帮你了解更多技巧。
发表回复
要发表评论,您必须先登录。